home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Add-On
/
Workbench Add-On - Volume 1.iso
/
Dev
/
Oberon
/
source
/
amiga
/
Graphics.mod
< prev
next >
Wrap
Text File
|
1995-06-29
|
110KB
|
3,261 lines
(***************************************************************************
$RCSfile: Graphics.mod $
Description: Interface to graphics.library
Created by: fjc (Frank Copeland)
$Revision: 3.8 $
$Author: fjc $
$Date: 1995/06/04 23:13:14 $
Includes Release 40.15
(C) Copyright 1985-1993 Commodore-Amiga, Inc.
All Rights Reserved
Oberon-A interface Copyright © 1994-1995, Frank Copeland.
This file is part of the Oberon-A Interface.
See Oberon-A.doc for conditions of use and distribution.
***************************************************************************)
<* STANDARD- *>
MODULE [2] Graphics;
IMPORT
SYS := SYSTEM, Kernel, e := Exec, h := Hardware, u := Utility,
s := Sets;
(**
** All pointers are declared forward here for convenience.
*)
TYPE
RectanglePtr * = POINTER TO Rectangle;
Rect32Ptr * = POINTER TO Rect32;
PointPtr * = POINTER TO Point;
BitMapPtr * = POINTER TO BitMap;
ExtendedNodePtr * = POINTER TO ExtendedNode;
AnalogSignalIntervalPtr * = POINTER TO AnalogSignalInterval;
SpecialMonitorPtr * = POINTER TO SpecialMonitor;
MonitorSpecPtr * = POINTER TO MonitorSpec;
QueryHeaderPtr * = POINTER TO QueryHeader;
DisplayInfoPtr * = POINTER TO DisplayInfo;
DimensionInfoPtr * = POINTER TO DimensionInfo;
MonitorInfoPtr * = POINTER TO MonitorInfo;
NameInfoPtr * = POINTER TO NameInfo;
VSpritePtr * = POINTER TO VSprite;
BobPtr * = POINTER TO Bob;
AnimCompPtr * = POINTER TO AnimComp;
DBufPacketPtr * = POINTER TO DBufPacket;
AnimObPtr * = POINTER TO AnimOb;
CollTablePtr * = POINTER TO CollTable;
AreaInfoPtr * = POINTER TO AreaInfo;
TmpRasPtr * = POINTER TO TmpRas;
GelsInfoPtr * = POINTER TO GelsInfo;
RastPortPtr * = POINTER TO RastPort;
CopInsPtr * = POINTER TO CopIns;
CopInsCLPtr * = POINTER TO CopInsCL;
CprlistPtr * = POINTER TO Cprlist;
CopListPtr * = POINTER TO CopList;
CopList13Ptr * = POINTER TO CopList13;
UCopListPtr * = POINTER TO UCopList;
ViewPortPtr * = POINTER TO ViewPort;
ViewPtr * = POINTER TO View;
ViewExtraPtr * = POINTER TO ViewExtra;
ViewPortExtraPtr * = POINTER TO ViewPortExtra;
RasInfoPtr * = POINTER TO RasInfo;
ColorMapPtr * = POINTER TO ColorMap;
LayerInfoPtr * = POINTER TO LayerInfo;
LayerPtr * = POINTER TO Layer;
ClipRectPtr * = POINTER TO ClipRect;
RegionRectanglePtr * = POINTER TO RegionRectangle;
RegionPtr * = POINTER TO Region;
SimpleSpritePtr * = POINTER TO SimpleSprite;
TextAttrPtr * = POINTER TO TextAttr;
TTextAttrPtr * = POINTER TO TTextAttr;
TextFontPtr * = POINTER TO TextFont;
TextFontExtensionPtr * = POINTER TO TextFontExtension;
ColorFontColorsPtr * = POINTER TO ColorFontColors;
ColorTextFontPtr * = POINTER TO ColorTextFont;
TextextentPtr * = POINTER TO Textextent;
IsrvstrPtr * = POINTER TO Isrvstr;
BitScaleArgsPtr * = POINTER TO BitScaleArgs;
CopListDummyPtr * = POINTER TO CopListDummy;
PaletteExtraPtr * = POINTER TO PaletteExtra;
DBufInfoPtr * = POINTER TO DBufInfo;
ExtSpritePtr * = POINTER TO ExtSprite;
(*
** $VER: gfx.h 39.5 (19.3.92)
**
** general graphics library definitions
*)
TYPE
RectangleBase *= RECORD END;
Rectangle * = RECORD (RectangleBase)
minX *, minY * : INTEGER;
maxX *, maxY * : INTEGER;
END; (* Rectangle *)
Rect32 * = RECORD
minX *, minY * : LONGINT;
maxX *, maxY * : LONGINT;
END; (* Rect32 *)
Point * = RECORD
x *, y * : INTEGER;
END; (* Point *)
PLANEPTR * = e.APTR;
BitMap * = RECORD
bytesPerRow * : e.UWORD;
rows * : e.UWORD;
flags * : s.SET8;
depth * : SHORTINT;
pad * : e.UWORD;
planes * : ARRAY 8 OF PLANEPTR;
END; (* BitMap *)
CONST
(* flags for AllocBitMap, etc. *)
bmbClear * = 0;
bmbDisplayable * = 1;
bmbInterleaved * = 2;
bmbStandard * = 3;
bmbMinPlanes * = 4;
(* the following are for GetBitMapAttr() *)
bmaHeight * = 0;
bmaDepth * = 4;
bmaWidth * = 8;
bmaFlags * = 12;
(*
** $VER: gfxnodes.h 39.0 (21.8.91)
**
** graphics extended node definintions
*)
TYPE
ExtendedNodeBase *= RECORD (e.NodeBase) END;
ExtendedNodeBasePtr *= POINTER TO ExtendedNodeBase;
ExtendedNode * = RECORD (ExtendedNodeBase)
node * : e.Node;
subsystem * : SHORTINT;
subtype * : SHORTINT;
library * : LONGINT;
init * : e.PROC;
END; (* ExtendedNode *)
CONST
ssGraphics * = 02H;
viewExtraType * = 1;
viewPortExtraType * = 2;
specialMonitorType * = 3;
monitorSpecType * = 4;
(*
** $VER: monitor.h 39.7 (9.6.92)
**
** graphics monitorspec definintions
*)
TYPE
MonitorSpec * = RECORD (ExtendedNodeBase)
node * : ExtendedNode;
flags * : s.SET16;
ratioh * : LONGINT;
ratiov * : LONGINT;
totalRows * : e.UWORD;
totalColorClocks * : e.UWORD;
deniseMaxDisplayColumn * : e.UWORD;
beamCon0 * : e.UWORD;
minRow * : e.UWORD;
special * : SpecialMonitorPtr;
openCount * : e.UWORD;
transform * : e.PROC;
translate * : e.PROC;
scale * : e.PROC;
xoffset * : e.UWORD;
yoffset * : e.UWORD;
legalView * : Rectangle;
maxoscan * : e.PROC; (* maximum legal overscan *)
videoscan * : e.PROC; (* video display overscan *)
deniseMinDisplayColumn * : e.UWORD;
displayCompatible * : e.ULONG;
displayInfoDataBase * : e.List;
displayInfoDataBaseSemaphore * : e.SignalSemaphore;
mrgCop * : e.PROC;
loadView * : e.PROC;
killView * : e.PROC;
END; (* MonitorSpec *)
CONST
toMonitor * = 0;
fromMonitor * = 1;
standardXOffset * = 9;
standardYOffset * = 0;
msbRequestNTSC * = 0;
msbRequestPAL * = 1;
msbRequestSpecial * = 2;
msbRequestA2024 * = 3;
msbDoubleSprites * = 4;
(* obsolete, v37 compatible definitions follow *)
requestNTSC * = 1;
requestPAL * = 2;
requestSpecial * = 4;
requestA2024 * = 8;
defaultMonitorName * = "default.monitor";
ntscMonitorName * = "ntsc.monitor";
palMonitorName * = "pal.monitor";
standardMonitorMask * = requestNTSC + requestPAL;
standardNTSCRows * = 262;
standardPALRows * = 312;
standardColorClocks * = 226;
standardDeniseMax * = 455;
standardDeniseMin * = 93;
standardNTSCBeamCon * = {};
standardPALBeamCon * = {h.displayPAL};
specialBeamcon * =
{ h.varVBlank, h.loLDis, h.varVSync,
h.varHSync, h.varBeam, h.csBlank, h.vSyncTrue };
minNTSCRow * = 21;
minPALRow * = 29;
standardViewX * = 81H;
standardViewY * = 2CH;
standardHBstrt * = 06H;
standardHSstrt * = 0BH;
standardHSstop * = 1CH;
standardHBstop * = 2CH;
standardVBstrt * = 0122H;
standardVSstrt * = 02A6H;
standardVSstop * = 03AAH;
standardVBstop * = 1066H;
vgaColorClocks * = standardColorClocks DIV 2;
vgaTotalRows * = standardNTSCRows * 2;
vgaDeniseMin * = 59;
minvgaRow * = 29;
vgaHBstrt * = 08H;
vgaHSstrt * = 0EH;
vgaHSstop * = 1CH;
vgaHBstop * = 1EH;
vgaVBstrt * = 0000H;
vgaVSstrt * = 0153H;
vgaVSstop * = 0235H;
vgaVBstop * = 0CCDH;
vgaMonitorName * = "vga.monitor";
(* NOTE: VGA70 definitions are obsolete - a VGA70 monitor has never been
* implemented.
*)
vga70ColorClocks * = standardColorClocks DIV 2;
vga70TotalRows * = 449;
vga70DeniseMin * = 59;
minvga70Row * = 35;
vga70HBstrt * = 08H;
vga70HSstrt * = 0EH;
vga70HSstop * = 1CH;
vga70HBstop * = 1EH;
vga70VBstrt * = 0000H;
vga70VSstrt * = 02A6H;
vga70VSstop * = 0388H;
vga70VBstop * = 0F73H;
vga70beamcon * = specialBeamcon / { h.vSyncTrue };
vga70MonitorName * = "vga70.monitor";
broadcastHBstrt * = 01H;
broadcastHSstrt * = 06H;
broadcastHSstop * = 17H;
broadcastHBstop * = 27H;
broadcastVBstrt * = 0000H;
broadcastVSstrt * = 02A6H;
broadcastVSstop * = 054CH;
broadcastVBstop * = 1C40H;
broadcastBeamCon * = { h.loLDis, h.csBlank };
ratioFixedPart * = 4;
ratioUnity * = (*ASH (1, ratioFixedPart)*) 16;
TYPE
AnalogSignalInterval * = RECORD
start * : e.UWORD;
stop * : e.UWORD;
END; (* AnalogSignalInterval *)
SpecialMonitor * = RECORD (ExtendedNodeBase)
node * : ExtendedNode;
flags * : s.SET16;
doMonitor * : e.PROC;
reserved1 * : e.PROC;
reserved2 * : e.PROC;
reserved3 * : e.PROC;
hblank * : AnalogSignalInterval;
vblank * : AnalogSignalInterval;
hsync * : AnalogSignalInterval;
vsync * : AnalogSignalInterval;
END; (* SpecialMonitor *)
(*
** $VER: display.h 39.0 (21.8.91)
**
** definitions for display control registers
*)
CONST
(* bplcon0 defines *)
mode640 * = 15;
plnCntMsk * = {0..2}; (* how many bit planes? *)
(* 0 = none, 1->6 = 1->6, 7 = reserved *)
plnCntShft * = 12; (* bits to shift for bplcon0 *)
pf2pri * = 6; (* bplcon2 bit *)
colorOn * = 9; (* disable color burst *)
dblpf * = 10;
holdnmodify * = 11;
interlace * = 2; (* interlace mode for 400 *)
(* bplcon1 defines *)
fineScroll * = {0..3};
fineScrollShift * = 4;
fineScrollMask * = {0..3};
(* display window start and stop defines *)
horizPos * = {0..6}; (* horizontal start/stop *)
vrtclPos * = {0..8}; (* vertical start/stop *)
vrtclPosShift * = 7;
(* Data fetch start/stop horizontal position *)
dftchMask * = {0..7};
(* vposr bits *)
vposrlof * = {15};
(*
** $VER: displayinfo.h 39.13 (31.5.93)
**
** definitions for displayinfo database
*)
TYPE
(* the "public" handle to a DisplayInfoRecord *)
DisplayInfoHandle * = e.APTR;
CONST
(* datachunk type identifiers *)
dtagDisp * = 80000000H;
dtagDims * = 80001000H;
dtagMntr * = 80002000H;
dtagName * = 80003000H;
dtagVec * = 80004000H; (* internal use only *)
TYPE
QueryHeaderBase *= RECORD END;
QueryHeader * = RECORD (QueryHeaderBase)
structID * : e.ULONG; (* datachunk type identifier *)
displayID * : e.ULONG; (* copy of display record key *)
skipID * : e.ULONG; (* tagSKIP -- see tagitems.h *)
length * : e.ULONG; (* length of local data in double-longwords *)
END; (* QueryHeader *)
DisplayInfo * = RECORD (QueryHeaderBase)
header * : QueryHeader;
notAvailable * : s.SET16; (* if NULL available, else see defines *)
propertyFlags * : s.SET32; (* Properties of this mode see defines *)
resolution * : Point; (* ticks-per-pixel X/Y *)
pixelSpeed * : e.UWORD; (* aproximation in nanoseconds *)
numStdSprites * : e.UWORD; (* number of standard amiga sprites *)
paletteRange * : e.UWORD; (* distinguishable shades available *)
spriteResolution * : Point; (* std sprite ticks-per-pixel X/Y *)
pad * : ARRAY 4 OF e.UBYTE; (* used internally *)
redBits * : e.UBYTE; (* number of Red bits this display supports (V39) *)
greenBits * : e.UBYTE; (* number of Green bits this display supports (V39) *)
blueBits * : e.UBYTE; (* number of Blue bits this display supports (V39) *)
(* pad2 * : ARRAY 5 OF e.UBYTE; (* find some use for this. *)
Allow for different alignment rules (?) *)
pad2 * : ARRAY 4 OF e.UBYTE; (* find some use for this. *)
reserved * : ARRAY 2 OF e.ULONG; (* terminator *)
END; (* DisplayInfo *)
CONST
(* availability *)
availNoChips * = {0};
availNoMonitor * = {1};
availNotWithGenlock * = {2};
(* mode properties *)
isLace * = 0;
isDualPF * = 1;
isPF2Pri * = 2;
isHAM * = 3;
isECS * = 4; (* note: ECS modes (SHIRES, VGA, and **
** PRODUCTIVITY) do not support **
** attached sprites. **
*)
isAA * = 16; (* AA modes - may only be available
** if machine has correct memory
** type to support required
** bandwidth - check availability.
** (V39)
*)
isPAL * = 5;
isSprites * = 6;
isGenlock * = 7;
isWB * = 8;
isDraggable * = 9;
isPanelled * = 10;
isBeamSync * = 11;
isExtraHalfBrite * = 12;
(* The following dipIs... flags are new for V39 *)
isSpritesAtt * = 13; (* supports attached sprites *)
isSpritesChngRes * = 14; (* supports variable sprite resolution *)
isSpritesBorder * = 15; (* sprite can be displayed in the border *)
isScanDbl * = 17; (* scan doubled *)
isSpritesChngBase * = 18;
isSpritesChngPri * = 19;
isDBuffer * = 20; (* can support double buffering *)
isProgBeam * = 21; (* is a programmed beam-sync mode *)
isForeign * = 31; (* this mode is not native to the Amiga *)
TYPE
DimensionInfo * = RECORD (QueryHeaderBase)
header * : QueryHeader;
maxDepth * : e.UWORD; (* log2( max number of colors ) *)
minRasterWidth * : e.UWORD; (* minimum width in pixels *)
minRasterHeight * : e.UWORD; (* minimum height in pixels *)
maxRasterWidth * : e.UWORD; (* maximum width in pixels *)
maxRasterHeight * : e.UWORD; (* maximum height in pixels *)
nominal * : Rectangle; (* "standard" dimensions *)
maxOScan * : Rectangle; (* fixed, hardware dependant *)
videoOScan * : Rectangle; (* fixed, hardware dependant *)
txtOScan * : Rectangle; (* editable via preferences *)
stdOScan * : Rectangle; (* editable via preferences *)
pad * : ARRAY 14 OF e.UBYTE;
reserved * : ARRAY 2 OF e.ULONG; (* terminator *)
END; (* DimensionInfo *)
MonitorInfo * = RECORD (QueryHeaderBase)
header * : QueryHeader;
mspc * : MonitorSpecPtr; (* pointer to monitor specification *)
viewPosition * : Point; (* editable via preferences *)
viewResolution * : Point; (* standard monitor ticks-per-pixel *)
viewPositionRange * : Rectangle; (* fixed, hardware dependant *)
totalRows * : e.UWORD; (* display height in scanlines *)
totalColorClocks * : e.UWORD; (* scanline width in 280 ns units *)
minRow * : e.UWORD; (* absolute minimum active scanline *)
compatibility * : INTEGER; (* how this coexists with others *)
pad * : ARRAY 36 OF e.UBYTE;
defaultViewPosition * : Point; (* original, never changes *)
preferredModeID * : e.ULONG; (* for Preferences *)
reserved * : ARRAY 2 OF e.ULONG; (* terminator *)
END; (* MonitorInfo *)
CONST
(* monitor compatibility *)
mCompatMixed * = 0; (* can share display with other mcompatMIXED *)
mCompatSelf * = 1; (* can share only within same monitor *)
mCompatNobody * = -1; (* only one viewport at a time *)
displayNameLen * = 32;
TYPE
NameInfo * = RECORD (QueryHeaderBase)
header * : QueryHeader;
name * : ARRAY displayNameLen OF CHAR;
reserved * : ARRAY 2 OF e.ULONG; (* terminator *)
END; (* NameInfo *)
(*
** $VER: modeid.h 39.9 (27.5.93)
**
** graphics display mode IDs.
*)
CONST
(* DisplayInfoRecord identifiers *)
invalidID * = -1; (* ~0 *)
(* With all the new modes that are available under V38 and V39, it is highly
* recommended that you use either the asl.library screenmode requester,
* and/or the V39 graphics.library function BestModeIDA().
*
* DO NOT interpret the any of the bits in the ModeID for its meaning. For
* example, do not interpret bit 3 (0x4) as meaning the ModeID is interlaced.
* Instead, use GetDisplayInfoData() with dtagDisp, and examine the dip...
* flags to determine a ModeID's characteristics. The only exception to
* this rule is that bit 7 (0x80) will always mean the ModeID is
* ExtraHalfBright, and bit 11 (0x800) will always mean the ModeID is HAM.
*)
(* normal identifiers *)
monitorIDMask * = 0FFFF1000H;
defaultMonitorID * = 00000000H;
ntscMonitorID * = 00011000H;
palMonitorID * = 00021000H;
(* the following 22 composite keys are for Modes on the default Monitor.
* NTSC & PAL "flavors" of these particular keys may be made by or'ing
* the NTSC or PAL monitorId with the desired modeKey...
*
* For example, to specifically open a PAL HAM interlaced ViewPort
* (or intuition screen), you would use the modeid of
* (palMonitorId | hamlaceKey)
*)
loresKey * = 00000000H;
hiresKey * = 00008000H;
superKey * = 00008020H;
hamKey * = 00000800H;
loresLaceKey * = 00000004H;
hiresLaceKey * = 00008004H;
superLaceKey * = 00008024H;
hamLaceKey * = 00000804H;
loresDPFKey * = 00000400H;
hiresDPFKey * = 00008400H;
superDPFKey * = 00008420H;
loresLaceDPFKey * = 00000404H;
hiresLaceDPFKey * = 00008404H;
superLaceDPFKey * = 00008424H;
loresDPF2Key * = 00000440H;
hiresDPF2Key * = 00008440H;
superDPF2Key * = 00008460H;
loresLaceDPF2Key * = 00000444H;
hiresLaceDPF2Key * = 00008444H;
superLaceDPF2Key * = 00008464H;
extraHalfBriteKey * = 00000080H;
extraHalfBriteLaceKey * = 00000084H;
(* New for AA ChipSet (V39) *)
hiresHAMKey * = 00008800H;
superHAMKey * = 00008820H;
hiresEHBKey * = 00008080H;
superEHBKey * = 000080A0H;
hiresHAMLaceKey * = 00008804H;
superHAMLaceKey * = 00008824H;
hiresEHBLaceKey * = 00008084H;
superEHBLaceKey * = 000080A4H;
(* Added for V40 - may be useful modes for some games or animations. *)
loresSDblKey * = 00000008H;
loresHAMSDblKey * = 00000808H;
loresEHBSDblKey * = 00000088H;
hiresHAMSDblKey * = 00008808H;
(* vga identifiers *)
vgaMonitorID * = 00031000H;
vgaExtraLoresKey * = 00031004H;
vgaLoresKey * = 00039004H;
vgaProductKey * = 00039024H;
vgaHAMKey * = 00031804H;
vgaExtraLoresLaceKey * = 00031005H;
vgaLoresLaceKey * = 00039005H;
vgaProductLaceKey * = 00039025H;
vgaHAMLaceKey * = 00031805H;
vgaExtraLoresDPFKey * = 00031404H;
vgaLoresDPFKey * = 00039404H;
vgaProductDPFKey * = 00039424H;
vgaExtraLoresLaceDPFKey * = 00031405H;
vgaLoresLaceDPFKey * = 00039405H;
vgaProductLaceDPFKey * = 00039425H;
vgaExtraLoresDPF2Key * = 00031444H;
vgaLoresDPF2Key * = 00039444H;
vgaProductDPF2Key * = 00039464H;
vgaExtraLoresLaceDPF2Key * = 00031445H;
vgaLoresLaceDPF2Key * = 00039445H;
vgaProductLaceDPF2Key * = 00039465H;
vgaExtraHalfBriteKey * = 00031084H;
vgaExtraHalfBriteLaceKey * = 00031085H;
(* New for AA ChipSet (V39) *)
vgaProductHAMKey * = 00039824H;
vgaLoresHAMKey * = 00039804H;
vgaExtraLoresHAMKey * = vgaHAMKey;
vgaProductHAMLaceKey * = 00039825H;
vgaLoresHAMLaceKey * = 00039805H;
vgaExtraLoresHAMLaceKey * = vgaHAMLaceKey;
vgaExtraLoresEHBKey * = vgaExtraHalfBriteKey;
vgaExtraLoresEHBLaceKey * = vgaExtraHalfBriteLaceKey;
vgaLoresEHBKey * = 00039084H;
vgaLoresEHBLaceKey * = 00039085H;
vgaEHBKey * = 000390A4H;
vgaEHBLaceKey * = 000390A5H;
(* These ModeIDs are the scandoubled equivalents of the above, with the
* exception of the DualPlayfield modes, as AA does not allow for scandoubling
* dualplayfield.
*)
vgaExtraLoresDblKey * = 00031000H;
vgaLoresDblKey * = 00039000H;
vgaProductDblKey * = 00039020H;
vgaExtraLoresHAMDblKey * = 00031800H;
vgaLoresHAMDblKey * = 00039800H;
vgaProductHAMDblKey * = 00039820H;
vgaExtraLoresEHBDblKey * = 00031080H;
vgaLoresEHBDblKey * = 00039080H;
vgaProductEHBDblKey * = 000390A0H;
(* a2024 identifiers *)
a2024MonitorID * = 00041000H;
a2024tenHertzKey * = 00041000H;
a2024fifteenHertzKey * = 00049000H;
(* prototype identifiers *)
protoMonitorID * = 00051000H;
(* These monitors and modes were added for the V38 release. *)
euro72MonitorId * = 000061000H;
euro72ExtraLoresKey * = 000061004H;
euro72LoresKey * = 000069004H;
euro72ProductKey * = 000069024H;
euro72HAMKey * = 000061804H;
euro72ExtraLoresLaceKey * = 000061005H;
euro72LoresLaceKey * = 000069005H;
euro72ProductLaceKey * = 000069025H;
euro72HAMLaceKey * = 000061805H;
euro72ExtraLoresDPFKey * = 000061404H;
euro72LoresDPFKey * = 000069404H;
euro72ProductDPFKey * = 000069424H;
euro72ExtraLoresLaceDPFKey * = 000061405H;
euro72LoresLaceDPFKey * = 000069405H;
euro72ProductLaceDPFKey * = 000069425H;
euro72ExtraLoresDPF2Key * = 000061444H;
euro72LoresDPF2Key * = 000069444H;
euro72ProductDPF2Key * = 000069464H;
euro72ExtraLoresLaceDPF2Key * = 000061445H;
euro72LoresLaceDPF2Key * = 000069445H;
euro72ProductLaceDPF2Key * = 000069465H;
euro72ExtraHalfBriteKey * = 000061084H;
euro72ExtraHalfBriteLaceKey * = 000061085H;
(* New AA modes (V39) *)
euro72ProductHAMKey * = 000069824H;
euro72ProductHAMLaceKey * = 000069825H;
euro72LoresHAMKey * = 000069804H;
euro72LoresHAMLaceKey * = 000069805H;
euro72ExtraLoresHAMKey * = euro72HAMKey;
euro72ExtraLoresHAMLaceKey * = euro72HAMLaceKey;
euro72ExtraLoresEHBKey * = euro72ExtraHalfBriteKey;
euro72ExtraLoresEHBLaceKey * = euro72ExtraHalfBriteLaceKey;
euro72LoresEHBKey * = 000069084H;
euro72LoresEHBLaceKey * = 000069085H;
euro72EHBKey * = 0000690A4H;
euro72EHBLaceKey * = 0000690A5H;
(* These ModeIDs are the scandoubled equivalents of the above, with the
* exception of the DualPlayfield modes, as AA does not allow for scandoubling
* dualplayfield.
*)
euro72ExtraLoresDblKey * = 000061000H;
euro72LoresDblKey * = 000069000H;
euro72ProductDblKey * = 000069020H;
euro72ExtraLoresHAMDblKey * = 000061800H;
euro72LoresHAMDblKey * = 000069800H;
euro72ProductHAMDblKey * = 000069820H;
euro72ExtraLoresEHBDblKey * = 000061080H;
euro72LoresEHBDblKey * = 000069080H;
euro72ProductEHBDblKey * = 0000690A0H;
euro36MonitorId * = 000071000H;
(* Euro36 modeids can be ORed with the default modeids a la NTSC and PAL.
* For example, Euro36 SuperHires is
* (EURO36_MONITOR_ID | SUPER_KEY)
*)
super72MonitorId * = 000081000H;
(* Super72 modeids can be ORed with the default modeids a la NTSC and PAL.
* For example, Super72 SuperHiresLace (800x600) is
* (SUPER72_MONITOR_ID | SUPER_LACE_KEY).
* The following scandoubled Modes are the exception:
*)
super72LoresDblKey * = 000081008H;
super72HiresDblKey * = 000089008H;
super72SuperDblKey * = 000089028H;
super72LoresHAMDblKey * = 000081808H;
super72HiresHAMDblKey * = 000089808H;
super72SuperHAMDblKey * = 000089828H;
super72LoresEHBDblKey * = 000081088H;
super72HiresEHBDblKey * = 000089088H;
super72SuperEHBDblKey * = 0000890A8H;
(* These monitors and modes were added for the V39 release. *)
dblNTSCMonitorId * = 000091000H;
dblNTSCLoresKey * = 000091000H;
dblNTSCLoresffKey * = 000091004H;
dblNTSCLoresHAMKey * = 000091800H;
dblNTSCLoresHAMFFKey * = 000091804H;
dblNTSCLoresEHBKey * = 000091080H;
dblNTSCLoresEHBFFKey * = 000091084H;
dblNTSCLoresLaceKey * = 000091005H;
dblNTSCLoresHAMLaceKey * = 000091805H;
dblNTSCLoresEHBLaceKey * = 000091085H;
dblNTSCLoresDPFKey * = 000091400H;
dblNTSCLoresDPFFFKey * = 000091404H;
dblNTSCLoresDPFLaceKey * = 000091405H;
dblNTSCLoresDPF2Key * = 000091440H;
dblNTSCLoresDPF2FFKey * = 000091444H;
dblNTSCLoresDPF2LaceKey * = 000091445H;
dblNTSCHiresKey * = 000099000H;
dblNTSCHiresFFKey * = 000099004H;
dblNTSCHiresHAMKey * = 000099800H;
dblNTSCHiresHAMFFKey * = 000099804H;
dblNTSCHiresLaceKey * = 000099005H;
dblNTSCHiresHAMLaceKey * = 000099805H;
dblNTSCHiresEHBKey * = 000099080H;
dblNTSCHiresEHBFFKey * = 000099084H;
dblNTSCHiresEHBLaceKey * = 000099085H;
dblNTSCHiresDPFKey * = 000099400H;
dblNTSCHiresDPFFFKey * = 000099404H;
dblNTSCHiresDPFLaceKey * = 000099405H;
dblNTSCHiresDPF2Key * = 000099440H;
dblNTSCHiresDPF2FFKey * = 000099444H;
dblNTSCHiresDPF2LaceKey * = 000099445H;
dblNTSCExtraLoresKey * = 000091200H;
dblNTSCExtraLoresHAMKey * = 000091A00H;
dblNTSCExtraLoresEHBKey * = 000091280H;
dblNTSCExtraLoresDPFKey * = 000091600H;
dblNTSCExtraLoresDPF2Key * = 000091640H;
dblNTSCExtraLoresFFKey * = 000091204H;
dblNTSCExtraLoresHAMFFKey * = 000091A04H;
dblNTSCExtraLoresEHBFFKey * = 000091284H;
dblNTSCExtraLoresDPFFFKey * = 000091604H;
dblNTSCExtraLoresDPF2FFKey * = 000091644H;
dblNTSCExtraLoresLaceKey * = 000091205H;
dblNTSCExtraLoresHAMLaceKey * = 000091A05H;
dblNTSCExtraLoresEHBLaceKey * = 000091285H;
dblNTSCExtraLoresDPFLaceKey * = 000091605H;
dblNTSCExtraLoresDPF2LaceKey * = 000091645H;
dblPALMonitorId * = 0000A1000H;
dblPALLoresKey * = 0000A1000H;
dblPALLoresFFKey * = 0000A1004H;
dblPALLoresHAMKey * = 0000A1800H;
dblPALLoresHAMFFKey * = 0000A1804H;
dblPALLoresEHBKey * = 0000A1080H;
dblPALLoresEHBFFKey * = 0000A1084H;
dblPALLoresLaceKey * = 0000A1005H;
dblPALLoresHAMLaceKey * = 0000A1805H;
dblPALLoresEHBLaceKey * = 0000A1085H;
dblPALLoresDPFKey * = 0000A1400H;
dblPALLoresDPFFFKey * = 0000A1404H;
dblPALLoresDPFLaceKey * = 0000A1405H;
dblPALLoresDPF2Key * = 0000A1440H;
dblPALLoresDPF2FFKey * = 0000A1444H;
dblPALLoresDPF2LaceKey * = 0000A1445H;
dblPALHiresKey * = 0000A9000H;
dblPALHiresFFKey * = 0000A9004H;
dblPALHiresHAMKey * = 0000A9800H;
dblPALHiresHAMFFKey * = 0000A9804H;
dblPALHiresLaceKey * = 0000A9005H;
dblPALHiresHAMLaceKey * = 0000A9805H;
dblPALHiresEHBKey * = 0000A9080H;
dblPALHiresEHBFFKey * = 0000A9084H;
dblPALHiresEHBLaceKey * = 0000A9085H;
dblPALHiresDPFKey * = 0000A9400H;
dblPALHiresDPFFFKey * = 0000A9404H;
dblPALHiresDPFLaceKey * = 0000A9405H;
dblPALHiresDPF2Key * = 0000A9440H;
dblPALHiresDPF2FFKey * = 0000A9444H;
dblPALHiresDPF2LaceKey * = 0000A9445H;
dblPALExtraLoresKey * = 0000A1200H;
dblPALExtraLoresHAMKey * = 0000A1A00H;
dblPALExtraLoresEHBKey * = 0000A1280H;
dblPALExtraLoresDPFKey * = 0000A1600H;
dblPALExtraLoresDPF2Key * = 0000A1640H;
dblPALExtraLoresFFKey * = 0000A1204H;
dblPALExtraLoresHAMFFKey * = 0000A1A04H;
dblPALExtraLoresEHBFFKey * = 0000A1284H;
dblPALExtraLoresDPFFFKey * = 0000A1604H;
dblPALExtraLoresDPF2FFKey * = 0000A1644H;
dblPALExtraLoresLaceKey * = 0000A1205H;
dblPALExtraLoresHAMLaceKey * = 0000A1A05H;
dblPALExtraLoresEHBLaceKey * = 0000A1285H;
dblPALExtraLoresDPFLaceKey * = 0000A1605H;
dblPALExtraLoresDPF2LaceKey * = 0000A1645H;
(* Use these tags for passing to BestModeID() (V39) *)
specialFlags * = {isDualPF, isPF2Pri, isHAM, isExtraHalfBrite};
bidTagDipfMustHave * = 080000001H; (* mask of the DIPF_ flags the ModeID must have *)
(* Default - NULL *)
bidTagDipfMustNotHave * = 080000002H; (* mask of the DIPF_ flags the ModeID must not have *)
(* Default - SPECIAL_FLAGS *)
bidTagViewPort * = 080000003H; (* ViewPort for which a ModeID is sought. *)
(* Default - NULL *)
bidTagNominalWidth * = 080000004H; (* together make the aspect ratio and *)
bidTagNominalHeight * = 080000005H; (* / override the vp->Width/Height. *)
(* Default - SourceID NominalDimensionInfo,
* or vp->DWidth/Height, or (640 * 200),
* in that preferred order.
*)
bidTagDesiredWidth * = 080000006H; (* Nominal Width and Height of the *)
bidTagDesiredHeight * = 080000007H; (* / returned ModeID. *)
(* Default - same as Nominal *)
bidTagDepth * = 080000008H; (* ModeID must support this depth. *)
(* Default - vp->RasInfo->BitMap->Depth or 1 *)
bidTagMonitorID * = 080000009H; (* ModeID must use this monitor. *)
(* Default - use best monitor available *)
bidTagSourceID * = 08000000AH; (* instead of a ViewPort. *)
(* Default - VPModeID(vp) if BID_TAG_ViewPort is
* specified, else leave the DIPFMustHave and
* DIPFMustNotHave values untouched.
*)
bidTagRedBits * = 08000000BH; (* *)
bidTagBlueBits * = 08000000CH; (* } Match up from the database *)
bidTagGreenBits * = 08000000DH; (* / *)
(* Default - 4 *)
bidTagGfxPrivate * = 08000000EH; (* Private *)
(*
** $VER: gels.h 39.0 (21.8.91)
**
** definitions for AMIGA GELS (Graphics Elements)
*)
CONST
(* VSprite flags *)
(* user-set VSprite flags: *)
sUserFlags * = {0 .. 7}; (* mask of all user-settable VSprite-flags *)
vSprite * = 0; (* set if VSprite, clear if Bob *)
saveBack * = 1; (* set if background is to be saved/restored *)
overlay * = 2; (* set to mask image of Bob onto background *)
mustDraw * = 3; (* set if VSprite absolutely must be drawn *)
(* system-set VSprite flags: *)
backSaved * = 8; (* this Bob's background has been saved *)
bobUpdate * = 9; (* temporary flag, useless to outside world *)
gelGone * = 10; (* set if gel is completely clipped (offscreen) *)
vsOverflow * = 11; (* VSprite overflow (if MUSTDRAW set we draw!) *)
(* Bob flags *)
(* these are the user flag bits *)
bUserFlags * = {0 .. 7}; (* mask of all user-settable Bob-flags *)
saveBob * = 0; (* set to not erase Bob *)
bobIsComp * = 1; (* set to identify Bob as AnimComp *)
(* these are the system flag bits *)
bWaiting * = 8; (* set while Bob is waiting on 'after' *)
bDrawn * = 9; (* set when Bob is drawn this DrawG pass *)
bobsAway * = 10; (* set to initiate removal of Bob *)
bobNix * = 11; (* set when Bob is completely removed *)
savePreserve * = 12; (* for back-restore during double-buffer *)
outStep * = 13; (* for double-clearing if double-buffer *)
(* defines for the animation procedures *)
anFracSize * = 6;
animHalf * = 0020H;
ringTrigger * = 0001H;
TYPE
(* UserStuff definitions
* the user can define these to be a single variable or a sub-structure
* if undefined by the user, the system turns these into innocuous variables
* see the manual for a thorough definition of the UserStuff definitions
*
*)
(* VSprite user stuff *)
VUserStuff * = INTEGER;
(* Bob user stuff *)
BUserStuff * = INTEGER;
(* AnimOb user stuff *)
AUserStuff * = INTEGER;
(********************** * GEL STRUCTURES** ******************************** *)
VSprite * = RECORD
(* --------------------- SYSTEM VARIABLES ------------------------------- *)
(* GEL linked list forward/backward pointers sorted by y,x value *)
nextVSprite * : VSpritePtr;
prevVSprite * : VSpritePtr;
(* GEL draw list constructed in the order the Bobs are actually drawn, then
* list is copied to clear list
* must be here in VSprite for system boundary detection
*)
drawPath * : VSpritePtr; (* pointer of overlay drawing *)
clearPath * : VSpritePtr; (* pointer for overlay clearing *)
(* the VSprite positions are defined in (y,x) order to make sorting
* sorting easier, since (y,x) as a long integer
*)
oldY *, oldX * : INTEGER; (* previous position *)
(* --------------------- COMMON VARIABLES --------------------------------- *)
flags * : s.SET16; (* VSprite flags *)
(* --------------------- USER VARIABLES ----------------------------------- *)
(* the VSprite positions are defined in (y,x) order to make sorting
* sorting easier, since (y,x) as a long integer
*)
y *, x * : INTEGER; (* screen position *)
height * : INTEGER;
width * : INTEGER; (* number of words per row of image data *)
depth * : INTEGER; (* number of planes of data *)
meMask * : s.SET16; (* which types can collide with this VSprite *)
hitMask * : s.SET16; (* which types this VSprite can collide with *)
imageData * : e.APTR; (* pointer to VSprite image *)
(* borderLine is the one-dimensional logical OR of all
* the VSprite bits, used for fast collision detection of edge
*)
borderLine * : e.APTR; (* logical OR of all VSprite bits *)
collMask * : e.APTR; (* similar to above except this is a matrix *)
(* pointer to this VSprite's color definitions (not used by Bobs) *)
sprColors * : e.APTR;
vsBob * : BobPtr; (* points home if this VSprite is part of
a Bob *)
(* planePick flag: set bit selects a plane from image, clear bit selects
* use of shadow mask for that plane
* OnOff flag: if using shadow mask to fill plane, this bit (corresponding
* to bit in planePick) describes whether to fill with 0's or 1's
* There are two uses for these flags:
* - if this is the VSprite of a Bob, these flags describe how the Bob
* is to be drawn into memory
* - if this is a simple VSprite and the user intends on setting the
* MUSTDRAW flag of the VSprite, these flags must be set too to describe
* which color registers the user wants for the image
*)
planePick * : s.SET8;
planeOnOff * : s.SET8;
vUserExt * : VUserStuff; (* user definable: see note above *)
END; (* VSprite *)
Bob * = RECORD
(* blitter-objects *)
(* --------------------- SYSTEM VARIABLES --------------------------------- *)
(* --------------------- COMMON VARIABLES --------------------------------- *)
flags * : s.SET16;(* general purpose flags (see definitions below) *)
(* --------------------- USER VARIABLES ----------------------------------- *)
saveBuffer * : e.APTR; (* pointer to the buffer for background save *)
(* used by Bobs for "cookie-cutting" and multi-plane masking *)
imageShadow * : e.APTR;
(* pointer to BOBs for sequenced drawing of Bobs
* for correct overlaying of multiple component animations
*)
before * : BobPtr; (* draw this Bob before Bob pointed to by before *)
after * : BobPtr; (* draw this Bob after Bob pointed to by after *)
bobVSprite * : VSpritePtr; (* this Bob's VSprite definition *)
bobComp * : AnimCompPtr; (* pointer to this Bob's AnimComp def *)
dBuffer * : DBufPacketPtr; (* pointer to this Bob's dBuf packet *)
bUserExt * : BUserStuff; (* Bob user extension *)
END; (* Bob *)
AnimComp * = RECORD
(* --------------------- SYSTEM VARIABLES --------------------------------- *)
(* --------------------- COMMON VARIABLES --------------------------------- *)
flags * : s.SET16; (* AnimComp flags for system & user *)
(* timer defines how long to keep this component active:
* if set non-zero, timer decrements to zero then switches to nextSeq
* if set to zero, AnimComp never switches
*)
timer * : INTEGER;
(* --------------------- USER VARIABLES ----------------------------------- *)
(* initial value for timer when the AnimComp is activated by the system *)
timeSet * : INTEGER;
(* pointer to next and previous components of animation object *)
nextComp * : AnimCompPtr;
prevComp * : AnimCompPtr;
(* pointer to component component definition of next image in sequence *)
nextSeq * : AnimCompPtr;
prevSeq * : AnimCompPtr;
animCRoutine * : e.PROC; (* address of special animation procedure *)
yTrans * : INTEGER; (* initial y translation (if this is a component) *)
xTrans * : INTEGER; (* initial x translation (if this is a component) *)
headOb * : AnimObPtr;
animBob * : BobPtr;
END; (* AnimComp *)
AnimOb * = RECORD
(* --------------------- SYSTEM VARIABLES --------------------------------- *)
nextOb *, prevOb * : AnimObPtr;
(* number of calls to Animate this AnimOb has endured *)
clock * : LONGINT;
anOldY *, anOldX * : INTEGER; (* old y,x coordinates *)
(* --------------------- COMMON VARIABLES --------------------------------- *)
anY *, anX * : INTEGER; (* y,x coordinates of the AnimOb *)
(* --------------------- USER VARIABLES ----------------------------------- *)
yVel *, xVel * : INTEGER; (* velocities of this object *)
yAccel *, xAccell * : INTEGER; (* accelerations of this object *)
ringYTrans *, ringXTrans * : INTEGER; (* ring translation values *)
animoRoutine * : e.PROC; (* address of special animation
procedure *)
headComp * : AnimCompPtr; (* pointer to first component *)
aUserExt * : AUserStuff; (* AnimOb user extension *)
END; (* AnimOb *)
DBufPacket * = RECORD
bufY *, bufX * : INTEGER; (* save the other buffers screen coordinates *)
bufPath * : VSpritePtr; (* carry the draw path over the gap *)
(* these pointers must be filled in by the user *)
(* pointer to other buffer's background save buffer *)
bufBuffer * : e.APTR;
END; (* DBufPacket *)
CONST
(*** ********************************************************************** *)
(* these are GEL functions that are currently simple enough to exist as a
* definition. It should not be assumed that this will always be the case
*)
(*
#define InitAnimate(animKey) {*(animKey) = NULL;}
#define RemBob(b) {(b)->Flags |= BOBSAWAY;}
*)
(*** ********************************************************************** *)
b2Norm * = 0;
b2Swap * = 1;
b2Bobber * = 2;
(*** ********************************************************************** *)
TYPE
CollTable * = RECORD
collPtrs * : ARRAY 16 OF e.APTR;
END; (* CollTable *)
(*
** $VER: collide.h 37.0 (7.1.91)
**
** definitions for collision detection and control
*)
CONST
(* These bit descriptors are used by the GEL collide routines.
* These bits are set in the hitMask and meMask variables of
* a GEL to describe whether or not these types of collisions
* can affect the GEL. bndryHIT is described further below;
* this bit is permanently assigned as the boundary-hit flag.
* The other bit gelHIT is meant only as a default to cover
* any GEL hitting any other; the user may redefine this bit.
*)
borderHit * = 0;
(* These bit descriptors are used by the GEL boundry hit routines.
* When the user's boundry-hit routine is called (via the argument
* set by a call to SetCollision) the first argument passed to
* the user's routine is the address of the GEL involved in the
* boundry-hit, and the second argument has the appropriate bit(s)
* set to describe which boundry was surpassed
*)
topHit * = 1;
bottomHit * = 2;
leftHit * = 4;
rightHit * = 8;
(*
** $VER: rastport.h 39.0 (21.8.91)
**
** Graphics library rastport definitions
*)
TYPE
AreaInfo * = RECORD
vctrTbl * : e.APTR; (* ptr to start of vector table *)
vctrPtr * : e.APTR; (* ptr to current vertex *)
flagTbl * : e.APTR; (* ptr to start of vector flag table *)
flagPtr * : e.APTR; (* ptrs to areafill flags *)
count * : INTEGER; (* number of vertices in list *)
maxCount * : INTEGER; (* AreaMove/Draw will not allow Count>MaxCount *)
firstX *, firstY * : INTEGER; (* first point for this polygon *)
END; (* AreaInfo *)
TmpRas * = RECORD
rasPtr * : e.APTR;
size * : LONGINT;
END; (* TmpRas *)
GelsInfo * = RECORD
sprRsrvd * : SHORTINT; (* flag of which sprites to reserve from
vsprite system *)
flags * : e.BYTE; (* system use *)
gelHead *,
gelTail * : VSpritePtr; (* dummy vSprites for list management *)
(* pointer to array of 8 INTEGERS for sprite available lines *)
nextLine * : POINTER TO ARRAY 8 OF INTEGER;
(* pointer to array of 8 pointers for color-last-assigned to vSprites *)
lastColor * : POINTER TO ARRAY 8 OF POINTER TO ARRAY 1 OF INTEGER;
collHandler * : CollTablePtr; (* addresses of collision routines *)
leftmost *,
rightmost *,
topmost *,
bottommost * : INTEGER;
firstBlissObj *,
lastBlissObj * : e.APTR; (* system use only *)
END; (* GelsInfo *)
RastPort * = RECORD
layer * : LayerPtr;
bitMap * : BitMapPtr;
areaPtrn * : e.APTR; (* ptr to areafill pattern *)
tmpRas * : TmpRasPtr;
areaInfo * : AreaInfoPtr;
gelsInfo * : GelsInfoPtr;
mask * : s.SET8; (* write mask for this raster *)
fgPen * : SHORTINT; (* foreground pen for this raster *)
bgPen * : SHORTINT; (* background pen *)
aOlPen * : SHORTINT; (* areafill outline pen *)
drawMode * : s.SET8; (* drawing mode for fill, lines, and text *)
areaPtSz * : SHORTINT; (* 2^n words for areafill pattern *)
linpatcnt * : SHORTINT; (* current line drawing pattern preshift *)
dummy * : SHORTINT;
flags * : s.SET16; (* miscellaneous control bits *)
linePtrn * : e.UWORD; (* 16 bits for textured lines *)
x *, y * : INTEGER; (* current pen position *)
minterms * : ARRAY 8 OF e.UBYTE;
penWidth * : INTEGER;
penHeight * : INTEGER;
font * : TextFontPtr; (* current font address *)
algoStyle * : s.SET8; (* the algorithmically generated style *)
txFlags * : s.SET8; (* text specific flags *)
txHeight * : e.UWORD; (* text height *)
txWidth * : e.UWORD; (* text nominal width *)
txBaseline * : e.UWORD; (* text baseline *)
txSpacing * : INTEGER; (* text spacing (per character) *)
user * : e.APTR;
longreserved * : ARRAY 2 OF e.ULONG;
wordreserved * : ARRAY 7 OF e.UWORD; (* used to be a node *)
reserved * : ARRAY 8 OF e.UBYTE; (* for future use *)
END; (* RastPort *)
CONST
(* drawing modes *)
jam1 * = {}; (* jam 1 color into raster *)
jam2 * = {0}; (* jam 2 colors into raster *)
complement * = 1; (* XOR bits into raster *)
inversvid * = 2; (* inverse video for drawing modes *)
(* these are the flag bits for RastPort flags *)
frstDot * = 0; (* draw the first dot of this line ? *)
oneDot * = 1; (* use one dot mode for drawing lines *)
dBuffer * = 2; (* flag set when RastPorts
are double-buffered *)
(* only used for bobs *)
areaOutline * = 3; (* used by areafiller *)
noCrossFill * = 5; (* areafills have no crossovers *)
(* there is only one style of clipping: raster clipping *)
(* this preserves the continuity of jaggies regardless of clip window *)
(* When drawing into a RastPort, if the ptr to ClipRect is nil then there *)
(* is no clipping done, this is dangerous but useful for speed *)
(*
** $VER: copper.h 39.10 (31.5.93)
**
** graphics copper list intstruction definintions
*)
CONST
move * = 0; (* pseude opcode for move #XXXX,dir *)
wait * = 1; (* pseudo opcode for wait y,x *)
next * = 2; (* continue processing with next buffer *)
ntLof * = 15; (* copper instruction only for short frames *)
ntSht * = 14; (* copper instruction only for long frames *)
ntSys * = 13; (* copper user instruction only *)
TYPE
CopIns * = RECORD
opCode * : INTEGER; (* 0 = move, 1 = wait *)
destAddr *: INTEGER; (* vertical beam wait OR
* destination address of copper move *)
destData *: INTEGER; (* beam wait position OR
* destination immediate data to send *)
END; (* CopIns *)
CopInsCL * = RECORD
opCode * : INTEGER;
nxtlist * : CopListDummyPtr;
END; (* CopInsCL *)
TYPE
Cprlist * = RECORD
next * : CprlistPtr;
start * : e.APTR; (* start of copper list *)
maxCount * : INTEGER; (* number of long instructions *)
END; (* Cprlist *)
CopListDummy * = RECORD END;
CopList * = RECORD (CopListDummy)
next * : CopListPtr; (* next block for this copper list *)
copList * : CopListPtr; (* system use *)
viewPort * : ViewPortPtr; (* system use *)
copIns * : CopInsPtr; (* start of this block *)
copPtr * : CopInsPtr; (* intermediate ptr *)
copLStart * : e.APTR; (* mrgcop fills this in for Long Frame *)
copSStart * : e.APTR; (* mrgcop fills this in for Short Frame *)
count * : INTEGER; (* intermediate counter *)
maxCount * : INTEGER; (* max # of copins for this block *)
dyOffset * : INTEGER; (* offset this copper list vertical waits *)
slRepeat * : INTEGER;
flags * : s.SET16;
END; (* CopList *)
CopList13 = RECORD (CopListDummy)
next * : CopList13Ptr; (* next block for this copper list *)
copList * : CopList13Ptr; (* system use *)
viewPort * : ViewPortPtr; (* system use *)
copIns * : CopInsPtr; (* start of this block *)
copPtr * : CopInsPtr; (* intermediate ptr *)
copLStart * : e.APTR; (* mrgcop fills this in for Long Frame *)
copSStart * : e.APTR; (* mrgcop fills this in for Short Frame *)
count * : INTEGER; (* intermediate counter *)
maxCount * : INTEGER; (* max # of copins for this block *)
dyOffset * : INTEGER; (* offset this copper list vertical waits *)
cop2Start * : e.APTR;
cop3Start * : e.APTR;
cop4Start * : e.APTR;
cop5Start * : e.APTR;
slRepeat * : INTEGER;
flags * : s.SET16;
END; (* CopList13 *)
UCopList * = RECORD
next * : UCopListPtr;
firstCopList * : CopListDummyPtr; (* head node of this copper list *)
copList * : CopListDummyPtr; (* node in use *)
END; (* UCopList *)
(* private graphics data structure *)
CopinitPtr = POINTER TO Copinit;
Copinit = RECORD
vsyncHblank : ARRAY 2 OF e.UWORD;
diagstrt : ARRAY 12 OF e.UWORD; (* copper list for first bitplane *)
fm0 : ARRAY 2 OF e.UWORD;
diwstart : ARRAY 10 OF e.UWORD;
bplcon2 : ARRAY 2 OF e.UWORD;
sprfix : ARRAY 2*8 OF e.UWORD;
sprstrtup : ARRAY (2*8*2) OF e.UWORD;
wait14 : ARRAY 2 OF e.UWORD;
normHblank : ARRAY 2 OF e.UWORD;
jump : ARRAY 2 OF e.UWORD;
waitForever : ARRAY 6 OF e.UWORD;
sprstop : ARRAY 8 OF e.UWORD;
END; (* Copinit *)
(*
** $VER: view.h 39.34 (31.5.93)
**
** graphics view/viewport definintions
*)
TYPE
ViewPort * = RECORD
next * : ViewPortPtr;
colorMap * : ColorMapPtr; (* table of colors for this viewport *)
(* if this is nil, MakeVPort assumes default values *)
dspIns * : CopListDummyPtr; (* user by MakeView() *)
sprIns * : CopListDummyPtr; (* used by sprite stuff *)
clrIns * : CopListDummyPtr; (* used by sprite stuff *)
uCopIns * : UCopListPtr; (* User copper list *)
dWidth *, dHeight * : INTEGER;
dxOffset *, dyOffset * : INTEGER;
modes * : s.SET16;
spritePriorities * : SHORTINT; (* used by makevp *)
extendedModes * : SHORTINT;
rasInfo * : RasInfoPtr;
END; (* ViewPort *)
View * = RECORD
viewPort * : ViewPortPtr;
lofCprList * : CprlistPtr; (* used for interlaced and noninterlaced *)
shfCprList * : CprlistPtr; (* only used during interlace *)
dyOffset *, dxOffset * : INTEGER; (* for complete View positioning *)
(* offsets are +- adjustments to standard #s *)
modes * : s.SET16; (* such as INTERLACE, GENLOC *)
END; (* View *)
(* these structures are obtained via GfxNew *)
(* and disposed by GfxFree *)
ViewExtra * = RECORD (ExtendedNodeBase)
n * : ExtendedNode;
view * : ViewPtr; (* backwards link *)
monitor * : MonitorSpecPtr; (* monitors for this view *)
topLine * : e.UWORD;
END; (* ViewExtra *)
(* this structure is obtained via GfxNew *)
(* and disposed by GfxFree *)
ViewPortExtra * = RECORD (ExtendedNodeBase)
n * : ExtendedNode;
viewPort * : ViewPortPtr; (* backwards link *)
displayClip * : Rectangle; (* makevp display clipping information *)
(* These are added for V39 *)
vecTable : e.APTR; (* Private *)
driverData * : ARRAY 2 OF e.APTR;
flags * : s.SET16;
origin * : ARRAY 2 OF Point; (* First visible point relative to the DClip.
* One for each possible playfield.
*)
cop1ptr : e.ULONG; (* private *)
cop2ptr : e.ULONG; (* private *)
END; (* ViewPortExtra *)
CONST
(* All these vpx flags are private *)
vpxbFreeMe = 0;
vpxbLast = 1;
vpxbStraddles256 = 4;
vpxbStraddles512 = 5;
extendVStruct * = 12; (* unused bit in Modes field of View *)
(* VP_ fields internal only *)
a2024 * = 6;
tenhz * = 4;
(* defines used for Modes in IVPargs *)
genLockVideo * = 1;
lace * = 2;
doubleScan * = 3;
superHires * = 5;
pfba * = 6;
extraHalfBrite * = 7;
genlockAudio * = 8;
dualpf * = 10;
ham * = 11;
extendedMode * = 12;
vpHide * = 13;
sprites * = 14;
hires * = 15;
TYPE
(* used by callers to and InitDspC() *)
RasInfo * = RECORD
next * : RasInfoPtr; (* used for dualpf *)
bitMap * : BitMapPtr;
rxOffset *, ryOffset : INTEGER; (* scroll offsets in this BitMap *)
END; (* RasInfo *)
ColorMap * = RECORD
flags * : s.SET8;
type * : SHORTINT;
count * : e.UWORD;
colorTable * : e.APTR;
vpe * : ViewPortExtraPtr;
lowColorBits * : e.APTR;
transparencyPlane * : SHORTINT;
spriteResolution * : e.UBYTE;
spriteResDefault * : e.UBYTE; (* what resolution you get when you have set SPRITERESN_DEFAULT *)
auxFlags * : s.SET8;
vp * : ViewPortPtr;
normalDisplayInfo * : DisplayInfoPtr;
coerceDisplayInfo * : DisplayInfoPtr;
cmBatchItems * : u.TagListPtr;
vpModeID * : e.ULONG;
palExtra * : PaletteExtraPtr;
spriteBaseEven * : e.UWORD;
spriteBaseOdd * : e.UWORD;
bp0base * : e.UWORD;
bp1base * : e.UWORD;
END; (* ColorMap *)
CONST
(* if Type == 0 then ColorMap is V1.2/V1.3 compatible *)
(* if Type != 0 then ColorMap is V38 compatible *)
(* the system will never create other than V39 type colormaps when running V39 *)
colorMapTypeV12 * = 0;
colorMapTypeV14 * = 1;
colorMapTypeV36 * = colorMapTypeV14; (* use this definition *)
colorMapTypeV39 * = 2;
(* Flags variable *)
colorMapTransparency * = 0;
colorPlaneTransparency * = 1;
borderBlanking * = 2;
borderNoTransparency * = 3;
videoControlBatch * = 4;
userCopperClip * = 5;
borderSprites * = 6;
cmfCmTrans * = 0;
cmfCpTrans * = 1;
cmfBrdrBlnk * = 2;
cmfBrdnTran * = 3;
cmfBrdrSprt * = 6;
resnEcs * = 0;
(* ^140ns, except in 35ns viewport, where it is 70ns. *)
resn140ns * = 1;
resn70ns * = 2;
resn35ns * = 3;
resnDefault * = -1;
(* AuxFlags : *)
fullPalette * = 0;
noIntermedUpdate * = 1;
noColorLoad * = 2;
dualPFDisable * = 3;
TYPE
(* structure may be extended so watch out! *)
(* thanks for the warning :-) [fjc] *)
PaletteExtraBase *= RECORD (e.SignalSemaphoreBase) END;
PaletteExtra * = RECORD (PaletteExtraBase)
semaphore * : e.SignalSemaphore; (* shared semaphore for arbitration *)
firstFree : e.UWORD; (* *private* *)
nFree * : e.UWORD; (* number of free colors *)
firstShared : e.UWORD; (* *private* *)
nShared : e.UWORD; (* *private* *)
refCnt : e.APTR; (* *private* *)
allocList : e.APTR; (* *private* *)
viewPort * : ViewPortPtr; (* back pointer to viewport *)
sharableColors * : e.UWORD; (* the number of sharable colors. *)
END;
CONST
(* flags values for ObtainPen *)
penbExclusive * = 0;
penbNoSetColor * = 1;
(* precision values for ObtainBestPen : *)
precisionExact * = -1;
precisionImage * = 0;
precisionIcon * = 16;
precisionGui * = 32;
(* tags for ObtainBestPen: *)
obpPrecision * = 084000000H;
obpFailIfBad * = 084000001H;
(* From V39, MakeVPort() will return an error if there is not enough memory,
* or the requested mode cannot be opened with the requested depth with the
* given bitmap (for higher bandwidth alignments).
*)
mvpOk * = 0; (* you want to see this one *)
mvpNoMem * = 1; (* insufficient memory for intermediate workspace *)
mvpNoVpe * = 2; (* ViewPort does not have a ViewPortExtra, and
* insufficient memory to allocate a temporary one.
*)
mvpNoDspins * = 3; (* insufficient memory for intermidiate copper
* instructions.
*)
mvpNoDisplay * = 4; (* BitMap data is misaligned for this viewport's
* mode and depth - see AllocBitMap().
*)
mvpOffBottom = 5; (* PRIVATE - you will never see this. *)
(* From V39, MrgCop() will return an error if there is not enough memory,
* or for some reason MrgCop() did not need to make any copper lists.
*)
mcopOk * = 0; (* you want to see this one *)
mcopNoMem * = 1; (* insufficient memory to allocate the system
* copper lists.
*)
mcopNop * = 2; (* MrgCop() did not merge any copper lists
* (eg, no ViewPorts in the list, or all marked as
* hidden).
*)
TYPE
DBufInfo * = RECORD
link1 * : e.APTR;
count1 * : e.ULONG;
safeMessage * : e.Message; (* replied to when safe to write to old bitmap *)
userData1 * : e.APTR; (* first user data *)
link2 * : e.APTR;
count2 * : e.ULONG;
dispMessage * : e.Message; (* replied to when new bitmap has been displayed at least
once *)
userData2 * : e.APTR; (* second user data *)
matchLong * : e.ULONG;
copPtr1 * : e.APTR;
copPtr2 * : e.APTR;
copPtr3 * : e.APTR;
beamPos1 * : e.UWORD;
beamPos2 * : e.UWORD;
END;
(*
** $VER: layers.h 39.4 (14.4.92)
**
** graphics library layers definitions
*)
CONST
layerSimple * = 0;
layerSmart * = 1;
layerSuper * = 2;
layerUpdating * = 4;
layerBackdrop * = 6;
layerRefresh * = 7;
layerIRefresh * = 9;
layerIRefresh2 * = 10;
layerClipRectsLost * = 8; (* during BeginUpdate *)
(* or during layerop *)
(* this happens if out of memory *)
lmnRegion * = -1; (* removed in V39 includes *)
TYPE
LayerInfo * = RECORD
topLayer * : LayerPtr;
lp : LayerPtr; (* !! Private !! *)
obs * : ClipRectPtr;
freeClipRects : ClipRectPtr; (* !! Private !! *)
privateReserve1 : LONGINT; (* !! Private !! *)
privateReserve2 : LONGINT; (* !! Private !! *)
lock : e.SignalSemaphore; (* !! Private !! *)
gsHead : e.MinList; (* !! Private !! *)
privateReserve3 : INTEGER; (* !! Private !! *)
privateReserve4 : e.APTR; (* !! Private !! *)
flags * : s.SET16;
count : SHORTINT; (* !! Private !! *)
lockLayersCount : SHORTINT; (* !! Private !! *)
privateReserve5 : INTEGER; (* !! Private !! *)
blankHook : e.APTR; (* !! Private !! *)
layerInfoExtra : e.APTR; (* !! Private !! *)
END; (* LayerInfo *)
CONST
newLayerInfoCalled * = 1;
alertLayersNoMem * = 83010000H; (* removed in V39 includes *)
(*
* layersNoBackfill is the value needed to get no backfill hook
* layersBackfill is the value needed to get the default backfill hook
*)
noBackfill * = SYS.VAL (u.HookPtr, 1);
backfill * = NIL;
(*
** $VER: clip.h 39.0 (2.12.91)
**
** Graphics library clip definitions
*)
TYPE
Layer * = RECORD
front -, back - : LayerPtr;
clipRect - : ClipRectPtr; (* read by roms to find first cliprect *)
rp - : RastPortPtr;
bounds - : Rectangle;
reserved - : ARRAY 4 OF e.UBYTE;
priority - : e.UWORD; (* system use only *)
flags - : s.SET16;(* obscured ?, Virtual BitMap? *)
superBitMap - : BitMapPtr;
superClipRect - : ClipRectPtr; (* super bitmap cliprects if VBitMap != 0 *)
(* else damage cliprect list for refresh *)
window - : e.APTR; (* reserved for user interface use *)
scrollX -, scrollY - : INTEGER;
cr -, cr2 -, crnew - : ClipRectPtr; (* used by dedice *)
superSaveClipRects - : ClipRectPtr; (* preallocated cr's *)
cliprects - : ClipRectPtr; (* system use during refresh *)
layerInfo - : LayerInfoPtr; (* points to head of the list *)
lock - : e.SignalSemaphore;
backFill - : u.HookPtr;
reserved1 - : e.ULONG;
clipRegion - : RegionPtr;
saveClipRects - : RegionPtr; (* used to back out when in trouble *)
width -, height - : INTEGER; (* system use *)
reserved2 - : ARRAY 18 OF e.UBYTE;
(* this must stay here *)
damageList - : RegionPtr; (* list of rectangles to refresh
through *)
END; (* Layer *)
ClipRect * = RECORD
next * : ClipRectPtr; (* roms used to find next ClipRect *)
prev * : ClipRectPtr; (* Temp use in layers (private) *)
lobs * : LayerPtr; (* Private use for layers *)
bitMap * : BitMapPtr; (* Bitmap for layers private use *)
bounds * : Rectangle; (* bounds of cliprect *)
p1 *, p2 * : ClipRectPtr; (* system reserved *)
reserved * : LONGINT; (* system use (Layers private) *)
flags * : s.SET32; (* Layers private field for cliprects *)
(* that layers allocates... *)
(* MUST be multiple of 8 bytes to buffer *)
END; (* ClipRect *)
CONST
(* internal cliprect flags *)
needsNoConcealedRasters = 1;
needsNoLayerblitDamage = 2;
(* defines for code values for getcode *)
isLessX * = 1;
isLessY * = 2;
isGrtrX * = 4;
isGrtrY * = 8;
(*
** $VER: regions.h 39.0 (21.8.91)
**
** Graphics region definitions
*)
TYPE
RegionRectangle * = RECORD
next *, prev * : RegionRectanglePtr;
bounds * : Rectangle;
END; (* RegionRectangle *)
Region * = RECORD (RectangleBase)
bounds * : Rectangle;
regionRectangle * : RegionRectanglePtr;
END; (* Region *)
(*
** $VER: sprite.h 39.6 (16.6.92)
**
** Graphics sprite definitions
*)
CONST
spriteAttached * = 80H;
TYPE
SimpleSpriteBase *= RECORD END;
SimpleSprite * = RECORD (SimpleSpriteBase)
posctldata * : e.APTR;
height * : e.UWORD;
x *, y * : e.UWORD; (* current position *)
num * : e.UWORD;
END; (* SimpleSprite *)
ExtSprite * = RECORD (SimpleSpriteBase)
simpleSprite * : SimpleSprite; (* conventional simple sprite structure *)
wordWidth * : e.UWORD; (* graphics use only, subject to change *)
flags * : s.SET16; (* graphics use only, subject to change *)
END;
CONST
(* tags for AllocSpriteData() *)
spriteaWidth * = 081000000H;
spriteaXreplication * = 081000002H;
spriteaYreplication * = 081000004H;
spriteaOutputheight * = 081000006H;
spriteaAttached * = 081000008H;
spriteaOlddataformat * = 08100000AH; (* MUST pass in outputheight if using this tag *)
(* tags for GetExtSprite() *)
gstagSpriteNum * = 082000020H;
gstagAttached * = 082000022H;
gstagSoftsprite * = 082000024H;
(* tags valid for either GetExtSprite or ChangeExtSprite *)
gstagScandoubled * = 083000000H; (* request "NTSC-Like" height if possible. *)
(*
** $VER: text.h 39.0 (21.8.91)
**
** graphics library text structures
*)
CONST
(* ------ Font Styles ------------------------------------------------ *)
normal * = {}; (* normal text (no style bits set) *)
normalFont * = {}; (* prehistoric synonym *)
underlined * = 0; (* underlined (under baseline) *)
bold * = 1; (* bold face text (ORed w/ shifted) *)
italic * = 2; (* italic (slanted 1:2 right) *)
extended * = 3; (* extended face (wider than normal) *)
colorfont * = 6; (* this uses ColorTextFont structure *)
tagged * = 7; (* the TextAttr is really an TTextAttr, *)
(* ------ Font Flags ------------------------------------------------- *)
romFont * = 0; (* font is in rom *)
diskFont * = 1; (* font is from diskfont.library *)
revPath * = 2; (* designed path is reversed (e.g. left) *)
tallDot * = 3; (* designed for hires non-interlaced *)
wideDot * = 4; (* designed for lores interlaced *)
proportional * = 5; (* character sizes can vary from nominal *)
designed * = 6; (* size explicitly designed, not constructed *)
(* note: if you do not set this bit in your *)
(* textattr, then a font may be constructed *)
(* for you by scaling an existing rom or disk *)
(* font (under V36 and above). *)
(* bit 7 is always clear for fonts on the graphics font list *)
removed * = 7; (* the font has been removed *)
TYPE
(****** TextAttr node, matches text attributes in RastPort **********)
TextAttr * = RECORD
name * : e.LSTRPTR; (* name of the font *)
ySize * : e.UWORD; (* height of the font *)
style * : s.SET8; (* intrinsic font style *)
flags * : s.SET8; (* font preferences and flags *)
END; (* TextAttr *)
TTextAttr * = RECORD
name * : e.LSTRPTR; (* name of the font *)
ySize * : e.UWORD; (* height of the font *)
style * : s.SET8; (* intrinsic font style *)
flags * : s.SET8; (* font preferences and flags *)
tags * : u.TagListPtr; (* extended attributes *)
END; (* TTextAttr *)
CONST
(****** Text Tags ************************************************** *)
deviceDPI * = u.user+1; (* Tag value is Point union: *)
(* Hi word XDPI, Lo word YDPI *)
maxFontMatchweight * = 32767; (* perfect match from WeighTAMatch *)
TYPE
(****** TextFonts node **********************************************)
TextFontBase *= RECORD (e.MessageBase) END;
TextFontBasePtr *= POINTER TO TextFontBase;
TextFont * = RECORD (TextFontBase)
message * : e.Message; (* reply message for font removal *)
(* font name in LN \ used in this *)
ySize * : e.UWORD; (* font height | order to best *)
style * : s.SET8; (* font style | match a font *)
flags * : s.SET8; (* preferences and flags / request. *)
xSize * : e.UWORD; (* nominal font width *)
baseline * : e.UWORD; (* distance from the top of char to baseline *)
boldSmear * : e.UWORD; (* smear to affect a bold enhancement *)
accessors * : e.UWORD; (* access count *)
loChar * : CHAR; (* the first character described here *)
hiChar * : CHAR; (* the last character described here *)
charData * : e.APTR; (* the bit character data *)
modulo * : e.UWORD; (* the row modulo for the strike font data *)
charLoc * : e.APTR; (* ptr to location data for the strike font *)
(* 2 words: bit offset then size *)
charSpace * : e.APTR; (* ptr to words of proportional spacing data *)
charKern * : e.APTR; (* ptr to words of kerning data *)
END; (* TextFont *)
CONST
(* ----- TextFontExtension.flags0 (partial definition) ---------------------------- *)
noRemFont * = 0; (* disallow RemFont for this font *)
TYPE
TextFontExtension * = RECORD
matchWord - : e.UWORD; (* a magic cookie for the extension *)
flags0 : s.SET8; (* (system private flags) *)
flags1 : s.SET8; (* (system private flags) *)
backPtr - : TextFontPtr; (* validation of compilation *)
origReplyPort - : e.MsgPortPtr; (* original value in tfExtension *)
tags - : u.TagListPtr; (* Text Tags for the font *)
oFontPatchS : e.APTR; (* (system private use) *)
oFontPatchK : e.APTR; (* (system private use) *)
(* this space is reserved for future expansion *)
END; (* TextFontExtension *)
CONST
(****** ColorTextFont node ******************************************)
(* ----- ctfFlags -------------------------------------------------- *)
ctColorMask * = {0..3}; (* mask to get to following color styles *)
ctColorFont * = 0; (* color map contains designer's colors *)
ctGreyFont * = 1; (* color map describes even-stepped *)
(* brightnesses from low to high *)
ctAntiAlias * = 2; (* zero background thru fully saturated char *)
ctMapColor * = 0; (* map ctfFgColor to the rpFgPen if it's *)
(* is a valid color within ctfLow..ctfHigh *)
TYPE
(*----- ColorFontColors --------------------------------------------*)
ColorFontColors * = RECORD
reserved * : e.UWORD; (* *must* be zero *)
count * : e.UWORD; (* number of entries in ColorTable *)
colorTable * : e.APTR; (* 4 bit per component color map packed xRGB *)
END; (* ColorFontColors *)
(*----- ColorTextFont ----------------------------------------------*)
ColorTextFont * = RECORD (TextFontBase)
tf * : TextFont;
flags * : s.SET16; (* extended flags *)
depth * : SHORTINT; (* number of bit planes *)
fgColor * : SHORTINT; (* color that is remapped to FgPen *)
low * : SHORTINT; (* lowest color represented here *)
high * : SHORTINT; (* highest color represented here *)
planePick * : s.SET8; (* PlanePick ala Images *)
planeOnOff * : s.SET8; (* PlaneOnOff ala Images *)
colorFontColors * : ColorFontColorsPtr; (* colors for font *)
charData * : ARRAY 8 OF e.APTR; (* pointers to bit planes ala tfCharData *)
END; (* ColorTextFont *)
(****** Textextent node *********************************************)
Textextent * = RECORD
width * : e.UWORD; (* same as TextLength *)
height * : e.UWORD; (* same as tfYSize *)
extent * : Rectangle; (* relative to CP *)
END; (* Textextent *)
(*
** $VER: videocontrol.h 39.8 (31.5.93)
**
** definitions for videocontrol commands
*)
CONST
vtagEndCM * = 00000000H;
vtagChromaKeyClr * = 80000000H;
vtagChromaKeySet * = 80000001H;
vtagBitPlaneKeyClr * = 80000002H;
vtagBitPlaneKeySet * = 80000003H;
vtagBorderBlankClr * = 80000004H;
vtagBorderBlankSet * = 80000005H;
vtagBorderNoTransClr * = 80000006H;
vtagBorderNoTransSet * = 80000007H;
vtagChromaPenClr * = 80000008H;
vtagChromaPenSet * = 80000009H;
vtagChromaPlaneSet * = 8000000AH;
vtagAttachCMSet * = 8000000BH;
vtagNextBufCM * = 8000000CH;
vtagBatchCMClr * = 8000000DH;
vtagBatchCMSet * = 8000000EH;
vtagNormalDispGet * = 8000000FH;
vtagNormalDispSet * = 80000010H;
vtagCoerceDispGet * = 80000011H;
vtagCoerceDispSet * = 80000012H;
vtagViewPortExtraGet * = 80000013H;
vtagViewPortExtraSet * = 80000014H;
vtagChromaKeyGet * = 80000015H;
vtagBitplaneKeyGet * = 80000016H;
vtagBorderBlankGet * = 80000017H;
vtagBorderNoTransGet * = 80000018H;
vtagChromaPenGet * = 80000019H;
vtagChromaPlaneGet * = 8000001AH;
vtagAttachCMGet * = 8000001BH;
vtagBatchCMGet * = 8000001CH;
vtagBatchItemsGet * = 8000001DH;
vtagBatchItemsSet * = 8000001EH;
vtagBatchItemsAdd * = 8000001FH;
vtagVPModeIDGet * = 80000020H;
vtagVPModeIDSet * = 80000021H;
vtagVPModeIDClr * = 80000022H;
vtagUserClipGet * = 80000023H;
vtagUserClipSet * = 80000024H;
vtagUserClipClr * = 80000025H;
(* The following tags are V39 specific. They will be ignored (returing error -3) by
earlier versions *)
vtagPf1BaseGet * = 080000026H;
vtagPf2BaseGet * = 080000027H;
vtagSpEvenBaseGet * = 080000028H;
vtagSpOddBaseGet * = 080000029H;
vtagPf1BaseSet * = 08000002AH;
vtagPf2BaseSet * = 08000002BH;
vtagSpEvenBaseSet * = 08000002CH;
vtagSpOddBaseSet * = 08000002DH;
vtagBorderSpriteGet * = 08000002EH;
vtagBorderSpriteSet * = 08000002FH;
vtagBorderSpriteClr * = 080000030H;
vtagSpriteResnSet * = 080000031H;
vtagSpriteResnGet * = 080000032H;
vtagPf1ToSpritePriSet * = 080000033H;
vtagPf1ToSpritePriGet * = 080000034H;
vtagPf2ToSpritePriSet * = 080000035H;
vtagPf2ToSpritePriGet * = 080000036H;
vtagImmediate * = 080000037H;
vtagFullPaletteSet * = 080000038H;
vtagFullPaletteGet * = 080000039H;
vtagFullPaletteClr * = 08000003AH;
vtagDefSpriteResnSet * = 08000003BH;
vtagDefSpriteResnGet * = 08000003CH;
(* all the following tags follow the new, rational standard for videocontrol tags:
* VC_xxx,state set the state of attribute 'xxx' to value 'state'
* VC_xxx_QUERY,&var get the state of attribute 'xxx' and store it into the longword
* pointed to by &var.
*
* The following are new for V40:
*)
vcIntermediateCLUpdate * = 080000080H;
(* default=true. When set graphics will update the intermediate copper
* lists on color changes, etc. When false, it won't, and will be faster.
*)
vcIntermediateCLUpdateQuery * = 080000081H;
vcNoColorPaletteLoad * = 080000082H;
(* default = false. When set, graphics will only load color 0
* for this ViewPort, and so the ViewPort's colors will come
* from the previous ViewPort's.
*
* NB - Using this tag and VTAG_FULLPALETTE_SET together is undefined.
*)
vcNoColorPaletteLoadQuery * = 080000083H;
vcDualPFDisable * = 080000084H;
(* default = false. When this flag is set, the dual-pf bit
in Dual-Playfield screens will be turned off. Even bitplanes
will still come from the first BitMap and odd bitplanes
from the second BitMap, and both R[xy]Offsets will be
considered. This can be used (with appropriate palette
selection) for cross-fades between differently scrolling
images.
When this flag is turned on, colors will be loaded for
the viewport as if it were a single viewport of depth
depth1+depth2 *)
vcDualPFDisableQuery * = 080000085H;
(*
** $VER: graphint.h 39.0 (23.9.91)
**
** structure used by AddTOFTask
*)
TYPE
Isrvstr * = RECORD (e.NodeBase)
node * : e.Node;
iptr * : IsrvstrPtr; (* passed to srvr by os *)
code * : e.PROC;
ccode * : e.PROC;
carg * : LONGINT;
END; (* Isrvstr *)
(*
** $VER: scale.h 39.0 (21.8.91)
**
** structure argument to BitMapScale()
*)
TYPE
BitScaleArgs * = RECORD
srcX *, srcY * : e.UWORD; (* source origin *)
srcWidth *, srcHeight * : e.UWORD; (* source size *)
xSrcFactor *, ySrcFactor * : e.UWORD; (* scale factor denominators *)
destX *, destY * : e.UWORD; (* destination origin *)
destWidth *, destHeight * : e.UWORD; (* destination size result *)
xDestFactor *, yDestFactor * : e.UWORD; (* scale factor numerators *)
srcBitMap * : BitMapPtr; (* source BitMap *)
destBitMap * : BitMapPtr; (* destination BitMap *)
flags * : e.ULONG; (* reserved. Must be zero! *)
xdda *, ydda * : e.UWORD; (* reserved *)
reserved1 * : LONGINT;
reserved2 * : LONGINT;
END; (* BitScaleArgs *)
(*
** $VER: coerce.h 39.3 (15.2.93)
**
** mode coercion definitions
*)
(* These flags are passed (in combination) to CoerceMode() to determine the
* type of coercion required.
*)
CONST
(* Ensure that the mode coerced to can display just as many colours as the
* ViewPort being coerced.
*)
preserveColors * = 1;
(* Ensure that the mode coerced to is not interlaced. *)
avoidFlicker * = 2;
(* Coercion should ignore monitor compatibility issues. *)
ignoreMCompat * = 4;
bidTagCoerce = 1; (* Private *)
(*
** $VER: rpattr.h 39.2 (31.5.93)
**
** tag definitions for GetRPAttr, SetRPAttr
*)
CONST
rpFont * = 080000000H; (* get/set font *)
rpAPen * = 080000002H; (* get/set apen *)
rpBPen * = 080000003H; (* get/set bpen *)
rpDrMd * = 080000004H; (* get/set draw mode *)
rpOutLinePen * = 080000005H; (* get/set outline pen *)
rpOutlinePen * = 080000005H; (* get/set outline pen. corrected case. *)
rpWriteMask * = 080000006H; (* get/set WriteMask *)
rpMaxPen * = 080000007H; (* get/set maxpen *)
rpDrawBounds * = 080000008H; (* get only rastport draw bounds. pass &rect *)
(*
** $VER: gfxbase.h 39.21 (21.4.93)
**
** graphics base definitions
*)
TYPE
GfxBasePtr * = POINTER TO GfxBase;
GfxBase * = RECORD (e.LibraryBase)
libNode * : e.Library;
actiView * : ViewPtr;
copinit * : CopinitPtr; (* ptr to copper start up list *)
cia * : e.APTR; (* for 8520 resource use *)
blitter * : e.APTR; (* for future blitter resource use *)
loFlist * : e.APTR;
shFlist * : e.APTR;
blthd *, blttl * : h.BltnodePtr;
bsblthd *, bsblttl * : h.BltnodePtr;
vbsrv *, timsrv *, bltsrv * : e.Interrupt;
textFonts * : e.List;
defaultFont * : TextFontPtr;
modes * : s.SET16; (* copy of current first bplcon0 *)
vBlank * : e.BYTE;
debug * : e.BYTE;
beamSync * : INTEGER;
systembplcon0 * : s.SET16;(* it is ored into each bplcon0 for display *)
spriteReserved * : e.UBYTE;
bytereserved * : e.UBYTE;
flags * : s.SET16;
blitLock * : INTEGER;
blitNest * : INTEGER;
blitWaitQ * : e.List;
blitOwner * : e.TaskPtr;
tofWaitQ * : e.List;
displayFlags * : s.SET16; (* NTSC PAL GENLOC etc *)
(* flags initialized at power on *)
simpleSprites * : e.APTR;
maxDisplayRow * : e.UWORD; (* hardware stuff, do not use *)
maxDisplayColumn * : e.UWORD; (* hardware stuff, do not use *)
normalDisplayRows * : e.UWORD;
normalDisplayColumns * : e.UWORD;
(* the following are for standard non interlace, 1/2 wb width *)
normalDPMX * : e.UWORD; (* Dots per meter on display *)
normalDPMY * : e.UWORD; (* Dots per meter on display *)
lastChanceMemory * : e.SignalSemaphorePtr;
lcMptr * : e.APTR;
microsPerLine * : e.UWORD; (* 256 time usec/line *)
minDisplayColumn * : e.UWORD;
chipRevBits0 * : s.SET8;
memType * : e.UBYTE;
reserved * : ARRAY 4 OF e.UBYTE;
monitorid * : e.UWORD; (* normally null *)
hedley * : ARRAY 8 OF e.ULONG;
hedleySprites * : ARRAY 8 OF e.ULONG; (* sprite ptrs for intuition mouse *)
hedleySprites1 * : ARRAY 8 OF e.ULONG; (* sprite ptrs for intuition mouse *)
hedleyCount * : INTEGER;
hedleyFlags * : s.SET16;
hedleyTmp * : INTEGER;
hashTable * : e.APTR;
currentTotRows * : e.UWORD;
currentTotCclks * : e.UWORD;
hedleyHint * : e.UBYTE;
hedleyHint2 * : e.UBYTE;
nreserved * : ARRAY 4 OF e.ULONG;
a2024SyncRaster * : e.APTR;
controlDeltaPAL * : INTEGER;
controlDeltaNTSC * : INTEGER;
currentMonitor * : MonitorSpecPtr;
monitorList * : e.List;
defaultMonitor * : MonitorSpecPtr;
monitorListSemaphore * : e.SignalSemaphorePtr;
displayInfoDataBase * : e.APTR;
topLine * : INTEGER;
actiViewCprSemaphore * : e.SignalSemaphorePtr;
utilBase * : e.LibraryPtr; (* for hook and tag utilities *)
execBase * : e.LibraryPtr; (* to link with rom.lib *)
bwshifts * : e.APTR;
strtFetchMasks * : e.APTR;
stopFetchMasks * : e.APTR;
overrun * : e.APTR;
realStops * : e.APTR;
spriteWidth * : e.UWORD; (* current width (in words) of sprites *)
spriteFMode * : e.UWORD; (* current sprite fmode bits *)
softSprites * : e.BYTE; (* bit mask of size change knowledgeable sprites *)
arraywidth * : e.BYTE;
defaultSpriteWidth * : e.UWORD; (* what width intuition wants *)
sprMoveDisable * : e.BYTE;
wantChips * : e.UBYTE;
boardMemType * : e.UBYTE;
bugs * : e.UBYTE;
layersBase * : e.APTR;
colorMask * : e.ULONG;
iVector * : e.APTR;
iData * : e.APTR;
specialCounter * : e.ULONG; (* special for double buffering *)
dBList * : e.APTR;
monitorFlags * : s.SET16;
scanDoubledSprites * : e.UBYTE;
bP3Bits * : e.UBYTE;
monitorVBlank * : AnalogSignalInterval;
monitor * : MonitorSpecPtr;
progData * : e.APTR;
extSprites * : e.UBYTE;
pad3 * : e.UBYTE;
gfxFlags * : s.SET16;
vBCounter * : e.ULONG;
hashTableSemaphore * : e.SignalSemaphorePtr;
hwEmul * : POINTER TO ARRAY 9 OF e.APTR;
END; (* GfxBase *)
CONST
(* Values for gfxBase.displayFlags *)
ntsc * = 1;
genloc * = 2;
pal * = 4;
todaSafe * = 8;
reallyPal * = 16; (* what is actual crystal frequency
(as opposed to what bootmenu set the agnus to)?
(V39) *)
lpenSwapFrames * = 32;
(* LightPen software could set this bit if the
* "lpen-with-interlace" fix put in for V39
* does not work. This is true of a number of
* Agnus chips.
* (V40).
*)
blitMsgFault * = 4;
(* bits defs for ChipRevBits *)
bigBlits * = 0;
hrAgnus * = 0;
hrDenise * = 1;
aaAlice * = 2;
aaLisa * = 3;
aaMLisa = 4; (* internal use only. *)
(* Pass ONE of these to SetChipRev() *)
chipRevA * = {hrAgnus};
chipRevECS * = {hrAgnus, hrDenise};
chipRevAA * = {aaAlice, aaLisa} + chipRevECS;
chipRevBest * = {0..31};
(* memory type *)
bus16 * = 0;
nmlCAS * = 0;
bus32 * = 1;
dblCAS * = 2;
bandwidth1x * = {bus16, nmlCAS};
bandwidth2xNml * = {bus32};
bandwidth2xDbl * = {dblCAS};
bandwidth4x * = {bus32, dblCAS};
(* GfxFlags (private) *)
newDatabase = 1;
graphicsName * = "graphics.library";
(**-- Library Base variable --------------------------------------------*)
VAR
gfx *, base * : GfxBasePtr;
(**-- Library Functions ------------------------------------------------*)
(*
** $VER: graphics_protos.h 39.31 (29.4.93)
*)
(* ------ BitMap primitives ------*)
PROCEDURE BltBitMap* [base,-30]
( srcBitMap [8] : BitMapPtr;
xSrc [0] : INTEGER;
ySrc [1] : INTEGER;
destBitMap [9] : BitMapPtr;
xDest [2] : INTEGER;
yDest [3] : INTEGER;
xSize [4] : INTEGER;
ySize [5] : INTEGER;
minterm [6] : e.UBYTE;
mask [7] : s.SET8;
tempA [10] : PLANEPTR )
: e.ULONG;
PROCEDURE BltTemplate* [base,-36]
( source [8] : PLANEPTR;
xSrc [0] : INTEGER;
srcMod [1] : INTEGER;
destRP [9] : RastPortPtr;
xDest [2] : INTEGER;
yDest [3] : INTEGER;
xSize [4] : INTEGER;
ySize [5] : INTEGER );
(* ------ Text routines ------*)
PROCEDURE ClearEOL* [base,-42]
( rp [9] : RastPortPtr );
PROCEDURE ClearScreen* [base,-48]
( rp [9] : RastPortPtr );
PROCEDURE TextLength* [base,-54]
( rp [9] : RastPortPtr;
string [8] : ARRAY OF CHAR;
count [0] : LONGINT )
: INTEGER;
PROCEDURE Text* [base,-60]
( rp [9] : RastPortPtr;
string [8] : ARRAY OF CHAR;
count [0] : LONGINT );
PROCEDURE SetFont* [base,-66]
( rp [9] : RastPortPtr;
textFont [8] : TextFontBasePtr );
PROCEDURE OpenFont* [base,-72]
( VAR textAttr [8] : TextAttr )
: TextFontPtr;
PROCEDURE CloseFont* [base,-78]
( textFont [9] : TextFontBasePtr );
PROCEDURE AskSoftStyle* [base,-84]
( rp [9] : RastPortPtr )
: s.SET8;
PROCEDURE SetSoftStyle* [base,-90]
( rp [9] : RastPortPtr;
style [0] : s.SET8;
enable [1] : s.SET8 )
: s.SET8;
(* ------ Gels routines ------*)
PROCEDURE AddBob* [base,-96]
( bob [8] : BobPtr;
rp [9] : RastPortPtr );
PROCEDURE AddVSprite* [base,-102]
( vSprite [8] : VSpritePtr;
rp [9] : RastPortPtr );
PROCEDURE DoCollision* [base,-108]
( rp [9] : RastPortPtr );
PROCEDURE DrawGList* [base,-114]
( rp [9] : RastPortPtr;
vp [8] : ViewPortPtr );
PROCEDURE InitGels* [base,-120]
( head [8] : VSpritePtr;
tail [9] : VSpritePtr;
gelsInfo [10] : GelsInfoPtr );
PROCEDURE InitMasks* [base,-126]
( vSprite [0] : VSpritePtr );
PROCEDURE RemIBob* [base,-132]
( bob [8] : BobPtr;
rp [9] : RastPortPtr;
vp [10] : ViewPortPtr );
PROCEDURE RemVSprite* [base,-138]
( vSprite [8] : VSpritePtr );
PROCEDURE SetCollision* [base,-144]
( num [0] : e.ULONG;
routine [8] : e.PROC;
gelsInfo [9] : GelsInfoPtr );
PROCEDURE SortGList* [base,-150]
( rp [9] : RastPortPtr );
PROCEDURE AddAnimOb* [base,-156]
( anOb [8] : AnimObPtr;
VAR anKey [9] : AnimObPtr;
rp [10] : RastPortPtr );
PROCEDURE Animate* [base,-162]
( VAR anKey [8] : AnimObPtr;
rp [9] : RastPortPtr );
PROCEDURE GetGBuffers* [base,-168]
( anOb [8] : AnimObPtr;
rp [9] : RastPortPtr;
flag [0] : BOOLEAN )
: BOOLEAN;
PROCEDURE InitGMasks* [base,-174]
( anOb [8] : AnimObPtr );
(* ------ General graphics routines ------*)
PROCEDURE DrawEllipse* [base,-180]
( rp [9] : RastPortPtr;
xCenter [0] : INTEGER;
yCenter [1] : INTEGER;
a [2] : INTEGER;
b [3] : INTEGER );
PROCEDURE AreaEllipse* [base,-186]
( rp [9] : RastPortPtr;
xCenter [0] : INTEGER;
yCenter [1] : INTEGER;
a [2] : INTEGER;
b [3] : INTEGER )
: BOOLEAN;
PROCEDURE LoadRGB4* [base,-192]
( vp [8] : ViewPortPtr;
colors [1] : ARRAY OF e.UWORD;
count [0] : LONGINT );
PROCEDURE InitRastPort* [base,-198]
( VAR rp [9] : RastPort );
PROCEDURE InitVPort* [base,-204]
( VAR vp [8] : ViewPort );
PROCEDURE OldMrgCop* [base,-210]
( view [9] : ViewPtr );
PROCEDURE MrgCop* [base,-210]
( view [9] : ViewPtr )
: LONGINT;
PROCEDURE MakeVPort* [base,-216]
( view [8] : ViewPtr;
vp [9] : ViewPortPtr );
PROCEDURE LoadView* [base,-222]
( view [9] : ViewPtr );
PROCEDURE WaitBlit* [base,-228] ();
PROCEDURE SetRast* [base,-234]
( rp [9] : RastPortPtr;
pen [0] : e.UBYTE );
PROCEDURE Move* [base,-240]
( rp [9] : RastPortPtr;
x [0] : INTEGER;
y [1] : INTEGER );
PROCEDURE Draw* [base,-246]
( rp [9] : RastPortPtr;
x [0] : INTEGER;
y [1] : INTEGER );
PROCEDURE AreaMove* [base,-252]
( rp [9] : RastPortPtr;
x [0] : INTEGER;
y [1] : INTEGER )
: BOOLEAN;
PROCEDURE AreaDraw* [base,-258]
( rp [9] : RastPortPtr;
x [0] : INTEGER;
y [1] : INTEGER )
: BOOLEAN;
PROCEDURE AreaEnd* [base,-264]
( rp [9] : RastPortPtr )
: BOOLEAN;
PROCEDURE WaitTOF* [base,-270] ();
PROCEDURE QBlit* [base,-276]
( blit [9] : h.BltnodePtr );
PROCEDURE InitArea* [base,-282]
( VAR areaInfo [8] : AreaInfo;
vectorBuffer [9] : e.APTR;
maxVectors [0] : LONGINT );
PROCEDURE SetRGB4* [base,-288]
( vp [8] : ViewPortPtr;
index [0] : LONGINT;
red [1] : e.UBYTE;
green [2] : e.UBYTE;
blue [3] : e.UBYTE );
PROCEDURE QBSBlit* [base,-294]
( blit [9] : h.BltnodePtr );
PROCEDURE BltClear* [base,-300]
( memBlock [9] : PLANEPTR;
byteCount [0] : e.ULONG;
flags [1] : s.SET32 );
PROCEDURE RectFill* [base,-306]
( rp [9] : RastPortPtr;
xMin [0] : INTEGER;
yMin [1] : INTEGER;
xMax [2] : INTEGER;
yMax [3] : INTEGER );
PROCEDURE BltPattern* [base,-312]
( rp [9] : RastPortPtr;
mask [8] : PLANEPTR;
xMin [0] : INTEGER;
yMin [1] : INTEGER;
xMax [2] : INTEGER;
yMax [3] : INTEGER;
maskBPR [4] : INTEGER );
PROCEDURE ReadPixel* [base,-318]
( rp [9] : RastPortPtr;
x [0] : INTEGER;
y [1] : INTEGER )
: LONGINT;
PROCEDURE WritePixel* [base,-324]
( rp [9] : RastPortPtr;
x [0] : INTEGER;
y [1] : INTEGER )
: BOOLEAN;
PROCEDURE Flood* [base,-330]
( rp [9] : RastPortPtr;
mode [2] : e.ULONG;
x [0] : INTEGER;
y [1] : INTEGER )
: BOOLEAN;
PROCEDURE PolyDraw* [base,-336]
( rp [9] : RastPortPtr;
count [0] : INTEGER;
polyTable [8] : ARRAY OF Point );
PROCEDURE PolyDrawList* [base,-336]
( rp [9] : RastPortPtr;
count [0] : INTEGER;
polyTable [8].. : INTEGER );
PROCEDURE SetAPen* [base,-342]
( rp [9] : RastPortPtr;
pen [0] : e.UBYTE );
PROCEDURE SetBPen* [base,-348]
( rp [9] : RastPortPtr;
pen [0] : e.UBYTE );
PROCEDURE SetDrMd* [base,-354]
( rp [9] : RastPortPtr;
drawMode [0] : s.SET8 );
PROCEDURE InitView* [base,-360]
( VAR view [9] : View );
PROCEDURE CBump* [base,-366]
( copList [9] : UCopListPtr );
PROCEDURE CMove* [base,-372]
( copList [9] : UCopListPtr;
destination [0] : e.APTR;
data [1] : e.UWORD );
PROCEDURE CWait* [base,-378]
( copList [9] : UCopListPtr;
v [0] : INTEGER;
h [1] : INTEGER );
PROCEDURE VBeamPos* [base,-384] ()
: LONGINT;
PROCEDURE InitBitMap* [base,-390]
( VAR bitMap [8] : BitMap;
depth [0] : SHORTINT;
width [1] : INTEGER;
height [2] : INTEGER );
PROCEDURE ScrollRaster* [base,-396]
( rp [9] : RastPortPtr;
dx [0] : INTEGER;
dy [1] : INTEGER;
xMin [2] : INTEGER;
yMin [3] : INTEGER;
xMax [4] : INTEGER;
yMax [5] : INTEGER );
PROCEDURE WaitBOVP* [base,-402]
( vp [8] : ViewPortPtr );
PROCEDURE GetSprite* [base,-408]
( VAR sprite [8] : SimpleSpriteBase;
num [0] : INTEGER )
: INTEGER;
PROCEDURE FreeSprite* [base,-414]
( num [0] : INTEGER );
PROCEDURE ChangeSprite* [base,-420]
( vp [8] : ViewPortPtr;
VAR sprite [9] : SimpleSpriteBase;
newData [10] : PLANEPTR );
PROCEDURE MoveSprite* [base,-426]
( vp [8] : ViewPortPtr;
VAR sprite [9] : SimpleSpriteBase;
x [0] : INTEGER;
y [1] : INTEGER );
PROCEDURE LockLayerRom* [base,-432]
( layer [13] : LayerPtr );
PROCEDURE UnlockLayerRom* [base,-438]
( layer [13] : LayerPtr );
PROCEDURE SyncSBitMap* [base,-444]
( layer [8] : LayerPtr );
PROCEDURE CopySBitMap* [base,-450]
( layer [8] : LayerPtr );
PROCEDURE OwnBlitter* [base,-456] ();
PROCEDURE DisownBlitter* [base,-462] ();
PROCEDURE InitTmpRas* [base,-468]
( VAR tmpRas [8] : TmpRas;
buffer [9] : PLANEPTR;
size [0] : e.ULONG );
PROCEDURE AskFont* [base,-474]
( rp [9] : RastPortPtr;
VAR textAttr [8] : TextAttr );
PROCEDURE AddFont* [base,-480]
( textFont [9] : TextFontBasePtr );
PROCEDURE RemFont* [base,-486]
( textFont [9] : TextFontBasePtr );
PROCEDURE AllocRaster* [base,-492]
( width [0] : e.UWORD;
height [1] : e.UWORD )
: PLANEPTR;
PROCEDURE FreeRaster* [base,-498]
( p [8] : PLANEPTR;
width [0] : e.UWORD;
height [1] : e.UWORD );
PROCEDURE AndRectRegion* [base,-504]
( region [8] : RegionPtr;
VAR rectangle [9] : RectangleBase );
PROCEDURE OrRectRegion* [base,-510]
( region [8] : RegionPtr;
VAR rectangle [9] : RectangleBase )
: BOOLEAN;
PROCEDURE NewRegion* [base,-516] ()
: RegionPtr;
PROCEDURE ClearRectRegion* [base,-522]
( region [8] : RegionPtr;
VAR rectangle [9] : RectangleBase )
: BOOLEAN;
PROCEDURE ClearRegion* [base,-528]
( region [8] : RegionPtr );
PROCEDURE DisposeRegion* [base,-534]
( region [8] : RegionPtr );
PROCEDURE FreeVPortCopLists* [base,-540]
( vp [8] : ViewPortPtr );
PROCEDURE FreeCopList* [base,-546]
( copList [8] : CopListDummyPtr );
PROCEDURE ClipBlit* [base,-552] (
srcRP [8] : RastPortPtr;
xSrc [0] : INTEGER;
ySrc [1] : INTEGER;
destRP [9] : RastPortPtr;
xDest [2] : INTEGER;
yDest [3] : INTEGER;
xSize [4] : INTEGER;
ySize [5] : INTEGER;
minterm [6] : e.UBYTE );
PROCEDURE XorRectRegion* [base,-558]
( region [8] : RegionPtr;
VAR rectangle [9] : RectangleBase )
: BOOLEAN;
PROCEDURE FreeCprList* [base,-564]
( cprList [8] : CprlistPtr );
PROCEDURE GetColorMap* [base,-570]
( entries [0] : LONGINT )
: ColorMapPtr;
PROCEDURE FreeColorMap* [base,-576]
( colorMap [8] : ColorMapPtr );
PROCEDURE GetRGB4* [base,-582]
( colorMap [8] : ColorMapPtr;
entry [0] : LONGINT )
: INTEGER;
PROCEDURE ScrollVPort* [base,-588]
( vp [8] : ViewPortPtr );
PROCEDURE UCopperListInit* [base,-594]
( uCopList [8] : UCopListPtr;
n [0] : LONGINT )
: CopListDummyPtr;
PROCEDURE FreeGBuffers* [base,-600]
( anOb [8] : AnimObPtr;
rp [9] : RastPortPtr;
flag [0] : BOOLEAN );
PROCEDURE BltBitMapRastPort* [base,-606]
( srcBitMap [8] : BitMapPtr;
xSrc [0] : INTEGER;
ySrc [1] : INTEGER;
destRP [9] : RastPortPtr;
xDest [2] : INTEGER;
yDest [3] : INTEGER;
xSize [4] : INTEGER;
ySize [5] : INTEGER;
minterm [6] : e.UBYTE )
: BOOLEAN;
PROCEDURE OrRegionRegion* [base,-612]
( srcRegion [8] : RegionPtr;
destRegion [9] : RegionPtr )
: BOOLEAN;
PROCEDURE XorRegionRegion* [base,-618]
( srcRegion [8] : RegionPtr;
destRegion [9] : RegionPtr )
: BOOLEAN;
PROCEDURE AndRegionRegion* [base,-624]
( srcRegion [8] : RegionPtr;
destRegion [9] : RegionPtr )
: BOOLEAN;
PROCEDURE SetRGB4CM* [base,-630] (
colorMap [8] : ColorMapPtr;
index [0] : INTEGER;
red [1] : e.UBYTE;
green [2] : e.UBYTE;
blue [3] : e.UBYTE );
PROCEDURE BltMaskBitMapRastPort* [base,-636] (
srcBitMap [8] : BitMapPtr;
xSrc [0] : INTEGER;
ySrc [1] : INTEGER;
destRP [9] : RastPortPtr;
xDest [2] : INTEGER;
yDest [3] : INTEGER;
xSize [4] : INTEGER;
ySize [5] : INTEGER;
minterm [6] : e.UBYTE;
bltMask [10] : PLANEPTR );
PROCEDURE AttemptLockLayerRom* [base,-654]
( layer [13] : LayerPtr )
: BOOLEAN;
(* --- functions in V36 or higher (distributed as Release 2.0) ---*)
PROCEDURE GfxNew* [base,-660]
( gfxNodeType [0] : e.ULONG )
: ExtendedNodeBasePtr;
PROCEDURE GfxFree* [base,-666]
( gfxNodePtr [8] : ExtendedNodeBasePtr );
PROCEDURE GfxAssociate* [base,-672]
( associateNode [8] : ExtendedNodeBasePtr;
gfxNodePtr [9] : ExtendedNodeBasePtr );
PROCEDURE BitMapScale* [base,-678]
( bitScaleArgs [8] : BitScaleArgsPtr );
PROCEDURE ScalerDiv* [base,-684]
( factor [0] : e.ULONG;
numerator [1] : e.ULONG;
denominator [2] : e.ULONG )
: e.UWORD;
PROCEDURE TextExtent* [base,-690]
( rp [9] : RastPortPtr;
string [8] : ARRAY OF CHAR;
count [0] : LONGINT;
VAR textExtent [10] : Textextent )
: INTEGER;
PROCEDURE TextFit* [base,-696]
( rp [9] : RastPortPtr;
string [8] : ARRAY OF CHAR;
strLen [0] : e.ULONG;
textExtent [10] : TextextentPtr;
constrainingExtent [11] : TextextentPtr;
strDirection [1] : LONGINT;
constrainingBitWidth [2] : e.ULONG;
constrainingBitHeight [3] : e.ULONG )
: e.ULONG;
PROCEDURE GfxLookUp* [base,-702]
( associateNode [8] : ExtendedNodeBasePtr )
: e.APTR;
PROCEDURE VideoControlA* [base,-708]
( colorMap [8] : ColorMapPtr;
tagarray [9] : ARRAY OF u.TagItem )
: BOOLEAN;
PROCEDURE VideoControl* [base,-708]
( colorMap [8] : ColorMapPtr;
tagarray [9].. : u.Tag )
: BOOLEAN;
PROCEDURE OpenMonitor* [base,-714]
( monitorName [9] : ARRAY OF CHAR;
displayID [0] : e.ULONG )
: MonitorSpecPtr;
PROCEDURE CloseMonitor* [base,-720]
( monitorSpec [8] : MonitorSpecPtr )
: BOOLEAN;
PROCEDURE FindDisplayInfo* [base,-726]
( displayID [0] : e.ULONG )
: DisplayInfoHandle;
PROCEDURE NextDisplayInfo* [base,-732]
( displayID [0] : e.ULONG )
: e.ULONG;
PROCEDURE AddDisplayInfo* [base,-738];
PROCEDURE AddDisplayInfoData* [base,-744];
PROCEDURE SetDisplayInfoData* [base,-750]
( handle [8] : DisplayInfoHandle;
buf [9] : ARRAY OF SYS.BYTE;
size [0] : e.ULONG;
tagID [1] : e.ULONG;
displayID [2] : e.ULONG)
: e.ULONG;
PROCEDURE GetDisplayInfoData* [base,-756]
( handle [8] : DisplayInfoHandle;
VAR buf [9] : ARRAY OF SYS.BYTE;
size [0] : e.ULONG;
tagID [1] : e.ULONG;
displayID [2] : e.ULONG )
: e.ULONG;
PROCEDURE FontExtent* [base,-762]
( font [8] : TextFontBasePtr;
VAR fontExtent [9] : Textextent );
PROCEDURE ReadPixelLine8* [base,-768]
( rp [8] : RastPortPtr;
xstart [0] : e.UWORD;
ystart [1] : e.UWORD;
width [2] : e.ULONG;
VAR array [10] : ARRAY OF SYS.BYTE;
tempRP [9] : RastPortPtr )
: LONGINT;
PROCEDURE WritePixelLine8* [base,-774]
( rp [8] : RastPortPtr;
xstart [0] : e.UWORD;
ystart [1] : e.UWORD;
width [2] : e.ULONG;
array [10] : ARRAY OF SYS.BYTE;
tempRP [9] : RastPortPtr )
: LONGINT;
PROCEDURE ReadPixelArray8* [base,-780]
( rp [8] : RastPortPtr;
xstart [0] : e.UWORD;
ystart [1] : e.UWORD;
xstop [2] : e.UWORD;
ystop [3] : e.UWORD;
VAR array [10] : ARRAY OF SYS.BYTE;
temprp [9] : RastPortPtr )
: LONGINT;
PROCEDURE WritePixelArray8* [base,-786]
( rp [8] : RastPortPtr;
xstart [0] : e.UWORD;
ystart [1] : e.UWORD;
xstop [2] : e.UWORD;
ystop [3] : e.UWORD;
VAR array [10] : ARRAY OF SYS.BYTE;
temprp [9] : RastPortPtr )
: LONGINT;
PROCEDURE GetVPModeID* [base,-792]
( vp [8] : ViewPortPtr )
: LONGINT;
PROCEDURE ModeNotAvailable* [base,-798]
( modeID [0] : e.ULONG )
: LONGINT;
PROCEDURE WeighTAMatchA* [base,-804]
( VAR reqTextAttr [8] : TextAttr;
VAR targetTextAttr [9] : TextAttr;
targetTags [10] : ARRAY OF u.TagItem )
: INTEGER;
PROCEDURE WeighTAMatch* [base,-804]
( VAR reqTextAttr [8] : TextAttr;
VAR targetTextAttr [9] : TextAttr;
targetTags [10].. : u.Tag )
: INTEGER;
PROCEDURE EraseRect* [base,-810]
( rp [9] : RastPortPtr;
xMin [0] : INTEGER;
yMin [1] : INTEGER;
xMax [2] : INTEGER;
yMax [3] : INTEGER );
PROCEDURE ExtendFontA* [base,-816]
( font [8] : TextFontBasePtr;
fontTags [9] : ARRAY OF u.TagItem )
: e.ULONG;
PROCEDURE ExtendFont* [base,-816]
( font [8] : TextFontBasePtr;
fontTags [9].. : u.Tag )
: e.ULONG;
PROCEDURE StripFont* [base,-822]
( font [8] : TextFontBasePtr );
(*--- functions in V39 or higher (Release 3) ---*)
PROCEDURE CalcIVG* [base,-828]
( v [8] : ViewPtr;
vp [9] : ViewPortPtr )
: e.UWORD;
PROCEDURE AttachPalExtra* [base,-834]
( cm [8] : ColorMapPtr;
vp [9] : ViewPortPtr )
: LONGINT;
PROCEDURE ObtainBestPenA* [base,-840]
( cm [8] : ColorMapPtr;
r [1] : e.ULONG;
g [2] : e.ULONG;
b [3] : e.ULONG;
tags [9] : ARRAY OF u.TagItem )
: LONGINT;
PROCEDURE ObtainBestPen* [base,-840]
( cm [8] : ColorMapPtr;
r [1] : e.ULONG;
g [2] : e.ULONG;
b [3] : e.ULONG;
tags [9]..: u.Tag )
: LONGINT;
PROCEDURE SetRGB32* [base,-852]
( vp [8] : ViewPortPtr;
n [0] : e.ULONG;
r [1] : e.ULONG;
g [2] : e.ULONG;
b [3] : e.ULONG );
PROCEDURE GetAPen* [base,-858]
( rp [8] : RastPortPtr )
: e.ULONG;
PROCEDURE GetBPen* [base,-864]
( rp [8] : RastPortPtr )
: e.ULONG;
PROCEDURE GetDrMd* [base,-870]
( rp [8] : RastPortPtr )
: s.SET32;
PROCEDURE GetOutlinePen* [base,-876]
( rp [8] : RastPortPtr )
: e.ULONG;
PROCEDURE LoadRGB32* [base,-882]
( vp [8] : ViewPortPtr;
VAR table [9] : ARRAY OF e.ULONG );
PROCEDURE SetChipRev* [base,-888]
( want [0] : s.SET32 )
: s.SET32;
PROCEDURE SetABPenDrMd* [base,-894]
( rp [9] : RastPortPtr;
apen [0] : e.ULONG;
bpen [1] : e.ULONG;
drawmode [2] : s.SET8 );
PROCEDURE GetRGB32* [base,-900]
( cm [8] : ColorMapPtr;
firstcolor [0] : e.ULONG;
ncolors [1] : e.ULONG;
VAR table [9] : ARRAY OF e.ULONG );
PROCEDURE AllocBitMap* [base,-918]
( sizex [0] : e.ULONG;
sizey [1] : e.ULONG;
depth [2] : e.ULONG;
flags [3] : s.SET32;
friendBitmap [8] : BitMapPtr )
: BitMapPtr;
PROCEDURE FreeBitMap* [base,-924]
( bm [8] : BitMapPtr );
PROCEDURE GetExtSpriteA* [base,-930]
( ss [10] : ExtSpritePtr;
tags [9] : ARRAY OF u.TagItem )
: LONGINT;
PROCEDURE GetExtSprite* [base,-930]
( ss [10] : ExtSpritePtr;
tags [9]..: u.Tag )
: LONGINT;
PROCEDURE CoerceMode* [base,-936]
( vp [8] : ViewPortPtr;
monitorid [0] : e.ULONG;
flags [1] : e.ULONG )
: e.ULONG;
PROCEDURE ChangeVPBitMap* [base,-942]
( vp [8] : ViewPortPtr;
bm [9] : BitMapPtr;
db [10] : DBufInfoPtr );
PROCEDURE ReleasePen* [base,-948]
( cm [8] : ColorMapPtr;
n [0] : e.ULONG );
PROCEDURE ObtainPen* [base,-954]
( cm [8] : ColorMapPtr;
n [0] : e.ULONG;
r [1] : e.ULONG;
g [2] : e.ULONG;
b [3] : e.ULONG;
f [4] : LONGINT )
: e.ULONG;
PROCEDURE GetBitMapAttr* [base,-960]
( bm [8] : BitMapPtr;
attrnum [1] : e.ULONG )
: e.ULONG;
PROCEDURE AllocDBufInfo* [base,-966]
( vp [8] : ViewPortPtr )
: DBufInfoPtr;
PROCEDURE FreeDBufInfo* [base,-972]
( dbi [9] : DBufInfoPtr );
PROCEDURE SetOutlinePen* [base,-978]
( rp [8] : RastPortPtr;
pen [0] : e.ULONG )
: e.ULONG;
PROCEDURE SetWriteMask* [base,-984]
( rp [8] : RastPortPtr;
msk [0] : s.SET32 )
: BOOLEAN;
PROCEDURE SetMaxPen* [base,-990]
( rp [8] : RastPortPtr;
maxpen [0] : e.ULONG );
PROCEDURE SetRGB32CM* [base,-996]
( cm [8] : ColorMapPtr;
n [0] : e.ULONG;
r [1] : e.ULONG;
g [2] : e.ULONG;
b [3] : e.ULONG );
PROCEDURE ScrollRasterBF* [base,-1002]
( rp [9] : RastPortPtr;
dx [0] : LONGINT;
dy [1] : LONGINT;
xMin [2] : LONGINT;
yMin [3] : LONGINT;
xMax [4] : LONGINT;
yMax [5] : LONGINT );
PROCEDURE FindColor* [base,-1008]
( cm [11] : ColorMapPtr;
r [1] : e.ULONG;
g [2] : e.ULONG;
b [3] : e.ULONG;
maxcolor [4] : LONGINT )
: LONGINT;
PROCEDURE AllocSpriteDataA* [base,-1020]
( bm [10] : BitMapPtr;
tags [9] : ARRAY OF u.TagItem )
: ExtSpritePtr;
PROCEDURE AllocSpriteData* [base,-1020]
( bm [10] : BitMapPtr;
tags [9]..: u.Tag )
: ExtSpritePtr;
PROCEDURE ChangeExtSpriteA* [base,-1026]
( vp [8] : ViewPortPtr;
oldsprite [9] : ExtSpritePtr;
newsprite [10] : ExtSpritePtr;
tags [11] : ARRAY OF u.TagItem )
: LONGINT;
PROCEDURE ChangeExtSprite* [base,-1026]
( vp [8] : ViewPortPtr;
oldsprite [9] : ExtSpritePtr;
newsprite [10] : ExtSpritePtr;
tags [11]..: u.Tag )
: LONGINT;
PROCEDURE FreeSpriteData* [base,-1032]
( sp [10] : ExtSpritePtr );
PROCEDURE SetRPAttrsA* [base,-1038]
( rp [8] : RastPortPtr;
tags [9] : ARRAY OF u.TagItem );
PROCEDURE SetRPAttrs* [base,-1038]
( rp [8] : RastPortPtr;
tags [9]..: u.Tag );
PROCEDURE GetRPAttrsA* [base,-1044]
( rp [8] : RastPortPtr;
tags [9] : ARRAY OF u.TagItem );
PROCEDURE GetRPAttrs* [base,-1044]
( rp [8] : RastPortPtr;
tags [9]..: u.Tag );
PROCEDURE BestModeIDA* [base,-1050]
( tags [8] : ARRAY OF u.TagItem )
: e.ULONG;
PROCEDURE BestModeID* [base,-1050]
( tags [8]..: u.Tag )
: e.ULONG;
(*--- functions in V40 or higher (Release 3.1) ---*)
PROCEDURE WriteChunkyPixels* [base,-1056]
( rp [8] : RastPortPtr;
xstart [0] : e.ULONG;
ystart [1] : e.ULONG;
xstop [2] : e.ULONG;
ystop [3] : e.ULONG;
array [10] : ARRAY OF SYS.BYTE;
bytesperrow [4] : LONGINT );
(**-- C Macros defined as procedures -----------------------------------*)
<*$LongVars+*>
(*
** $VER: gfxmacros.h 39.3 (31.5.93)
*)
(**-----------------------------------*)
(* This macro is obsolete as of V39. AllocBitMap() should be used for allocating
bitmap data, since it knows about the machine's particular alignment
restrictions.
*)
PROCEDURE [0] RASSIZE* (w, h : INTEGER) : LONGINT;
BEGIN (* RASSIZE *)
RETURN ( h * (((LONG (w) + 15) DIV 16) * 2))
END RASSIZE;
(**-----------------------------------*)
PROCEDURE [0] InitAnimate * (VAR anKey: AnimObPtr);
BEGIN
anKey := NIL;
END InitAnimate;
(**-----------------------------------*)
PROCEDURE [0] RemBob * (b: BobPtr);
BEGIN
INCL(b.flags,bobsAway);
END RemBob;
(**-----------------------------------*)
PROCEDURE [0] OnDisplay* ();
BEGIN (* OnDisplay *)
h.custom.dmacon := {h.dmaSet, h.raster}
END OnDisplay;
(**-----------------------------------*)
PROCEDURE [0] OffDisplay* ();
BEGIN (* OffDisplay *)
h.custom.dmacon := {h.raster}
END OffDisplay;
(**-----------------------------------*)
PROCEDURE [0] OnSprite* ();
BEGIN (* OnSprite *)
h.custom.dmacon := {h.dmaSet, h.sprite}
END OnSprite;
(**-----------------------------------*)
PROCEDURE [0] OffSprite* ();
BEGIN (* OffSprite *)
h.custom.dmacon := {h.sprite}
END OffSprite;
(**-----------------------------------*)
PROCEDURE [0] OnVBlank* ();
BEGIN (* OnVBlank *)
h.custom.intena := {h.dmaSet, h.vertb}
END OnVBlank;
(**-----------------------------------*)
PROCEDURE [0] OffVBlank* ();
BEGIN (* OffVBlank *)
h.custom.intena := {h.vertb}
END OffVBlank;
(**-----------------------------------*)
PROCEDURE [0] SetDrPt* (w : RastPortPtr; p : e.UWORD);
BEGIN (* SetDrPt *)
w.linePtrn := p; INCL (w.flags, frstDot); w.linpatcnt := 15
END SetDrPt;
(**-----------------------------------*)
PROCEDURE [0] SetAfPt* (w : RastPortPtr; p : e.APTR; n : SHORTINT);
BEGIN (* SetAfPt *)
w.areaPtrn := p; w.areaPtSz := n
END SetAfPt;
(**-----------------------------------*)
PROCEDURE [0] SetOPen* (w : RastPortPtr; c : SHORTINT);
BEGIN (* SetOPen *)
w.aOlPen := c; INCL (w.flags, areaOutline)
END SetOPen;
(**-----------------------------------*)
PROCEDURE [0] SetWrMsk* (w : RastPortPtr; m : s.SET8);
BEGIN (* SetWrMsk *)
w.mask := m
END SetWrMsk;
(* the SafeSetxxx macros are backwards (pre V39 graphics) compatible versions *)
(* using these macros will make your code do the right thing under V39 AND V37 *)
(**-----------------------------------*)
PROCEDURE [0] SafeSetOutlinePen* (w : RastPortPtr; c : SHORTINT);
VAR ignore : LONGINT;
BEGIN (* SafeSetOutlinePen *)
IF base.libNode.version < 39 THEN
w.aOlPen := c; INCL (w.flags, areaOutline)
ELSE
ignore := SetOutlinePen (w, c)
END
END SafeSetOutlinePen;
(**-----------------------------------*)
PROCEDURE [0] SafeSetWriteMask* (w : RastPortPtr; m : s.SET8);
VAR ignore : BOOLEAN;
BEGIN (* SafeSetWriteMask *)
IF base.libNode.version < 39 THEN
w.mask := m
ELSE
ignore := SetWriteMask (w, LONG (LONG (m)))
END
END SafeSetWriteMask;
(**-----------------------------------*)
PROCEDURE [0] BndryOff* (w : RastPortPtr);
BEGIN (* BndryOff *)
EXCL (w.flags, areaOutline)
END BndryOff;
(**-----------------------------------*)
PROCEDURE [0] CINIT* (c : UCopListPtr; n : LONGINT);
BEGIN (* CINIT *)
SYS.PUTREG (0, UCopperListInit (c, n))
END CINIT;
(**-----------------------------------*)
PROCEDURE [0] CMOVE*
(c : UCopListPtr; a : e.APTR; b : e.UWORD );
BEGIN (* CMOVE *)
CMove (c, a, b); CBump (c)
END CMOVE;
(**-----------------------------------*)
PROCEDURE [0] CWAIT* (c : UCopListPtr; a : INTEGER; b : INTEGER );
BEGIN (* CWAIT *)
CWait (c, a, b); CBump (c)
END CWAIT;
(**-----------------------------------*)
PROCEDURE [0] CEND* (c : UCopListPtr);
BEGIN (* CEND *)
CWAIT (c, 10000, 255)
END CEND;
(**-----------------------------------*)
PROCEDURE [0] DrawCircle* (rp : RastPortPtr; cx, cy, r : INTEGER);
BEGIN (* DrawCircle *)
DrawEllipse (rp, cx, cy, r, r)
END DrawCircle;
(**-----------------------------------*)
PROCEDURE [0] AreaCircle* (rp : RastPortPtr; cx, cy, r : INTEGER)
: BOOLEAN;
BEGIN (* AreaCircle *)
RETURN AreaEllipse (rp, cx, cy, r, r)
END AreaCircle;
(**-- Library Base Variable --------------------------------------------*)
<*$LongVars-*>
PROCEDURE* [0] Close (VAR rc : LONGINT);
BEGIN (* Close *)
IF base # NIL THEN e.CloseLibrary (base) END;
END Close;
BEGIN (* Graphics *)
base := SYS.VAL (GfxBasePtr,
e.OpenLibrary (graphicsName, e.libraryMinimum));
IF base = NIL THEN HALT (100) END;
gfx := base;
Kernel.SetCleanup (Close)
END Graphics.